Как показать изображение в пользовательском модуле DotNetNuke?

Я пишу собственный модуль для загрузки изображения. После загрузки файла в пользовательскую папку. При загрузке изображения адрес изображения правильный, но он не отображается в элементе управления изображением.

Как показать изображение в пользовательском модуле DotNetNuke?

//Save Picture Code:

    fileuppic.PostedFile.SaveAs(MapPath("~/images/Hotels/" + filename));

//Load Picture Code:

  while (dr.Read())
    {
       imgpic.ImageUrl = MapPath("~/images/Hotels/") + dr["Picture"].ToString();
    }

//my ImageControl :
    <asp:Image ID="imgpic" runat="server" />

person Morteza Jangjoo    schedule 21.05.2013    source источник
comment
Покажите свою работу и расскажите людям, что вы пробовали.   -  person Soner Gönül    schedule 21.05.2013
comment
вы используете динамическую регистрацию?   -  person Rachel Gallen    schedule 21.05.2013
comment
Моя проблема была решена путем изменения этой строки imgpic.ImageUrl = MapPath(~/images/Hotels/) + dr[Picture].ToString(); TO imgpic.ImageUrl = ..//..//images//Гостиницы// + dr[Picture].ToString();   -  person Morteza Jangjoo    schedule 21.05.2013


Ответы (2)


На самом деле вы не используете файловую систему так, как предполагалось с DNN. Изображениями следует управлять через пространство имен DNN DotNetNuke.Services.FileSystem, и вы, вероятно, пишете много кода, который вам не нужен, чтобы также сохранять изображения (попробуйте элемент управления dnnFilePickerUploader, он обрабатывает загрузку и передает вам FileId ). Как только вы сохраните FileId с вашим объектом, вы можете использовать что-то вроде этого для загрузки изображения:

private string GetPath(int fileId)
{
    StringBuilder sb = new StringBuilder("/Portals/");

    IFileInfo fi = FileManager.Instance.GetFile(fileId);
    sb.Append(fi.PortalId);
    sb.Append("/");
    sb.Append(fi.RelativePath);

    return sb.ToString();
}
person Chris Searles    schedule 23.05.2013
comment
Спасибо, это помогло мне показать изображения, расположенные на мультипортальных сайтах. - person Ryanb58; 24.07.2014

Если у вас уже есть fileId, вы можете просто сделать:

VB.NET

Protected Function GetPath(fileId As Integer) As String

    Dim fi = FileManager.Instance.GetFile(fileId)
    Return FileManager.Instance.GetUrl(fi)

End Function

C#

private string GetPath(int fileId)
{
    var fi = FileManager.Instance.GetFile(fileId);
    return FileManager.Instance.GetUrl(fi);
}
person Martin Korsgaard    schedule 13.09.2013
comment
Я думаю, что эквивалент С# будет примерно таким: private string GetPath(int fileId) { var fi = FileManager.Instance.GetFile(fileId); вернуть FileManager.Instance.GetUrl(fi); } - person Martin Korsgaard; 13.09.2013