Установить изображение управления изображением динамически со стороны сервера asp.NET

У меня есть сайт веб-форм, где пользователи загружают файлы, имя файла и т. д. сохраняется в БД. Затем эти файлы отображаются в списке данных. Я пытаюсь заставить этот список данных отображать разные изображения (значки) для представления типов файлов.

Это мой код позади. fm.getIcon — это настраиваемая функция, которая возвращает полный путь к файлу на сервере для соответствующего изображения, представляющего тип файла.

Когда я отлаживаю код, я могу убедиться, что изображение существует по пути imgFile.

Private Sub DataList1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataListItemEventArgs) Handles DataList1.ItemDataBound

        Dim docName As Label = e.Item.FindControl("fileNameLabel")
        Dim docImage As Image = e.Item.FindControl("image1")
        Dim imgFile As String = fm.getIcon(My.Computer.FileSystem.GetFileInfo(docName.Text).Extension)
        docImage.ImageUrl = imgFile

End Sub

Моя проблема в том, что изображение не загружается. Если я заменю imgFile на жестко заданный путь к изображению, он будет работать нормально.

Что мне не хватает?


person Khalid Rahaman    schedule 14.04.2011    source источник


Ответы (2)


Пожалуйста, попробуйте это.

// 1-й метод

string fileLocation = Server.MapPath("~/Images/MyFile.jpg");

FileInfo fileInfo = new FileInfo(fileLocation);

string fileExtension = fileInfo.Extension;

// 2-й метод

System.IO.Path.GetExtension(Server.MapPath("~/Images/MyFile.jpg")); // Result: .jpg

// Ваш метод получения значка

docImage.ImageUrl = "~/Icons/" + 
fm.getIcon(Path.GetExtension(Server.MapPath("~/Images/MyFile.jpg")));

public string getIcon(string extension)
{
  switch (extension.ToLower())
  {
    case ".asa":
      return "asa.png";
    case ".asax":
      return "asax.png";
    case ".ascx":
      return "ascx.png";                
    default:
      return "unknown.png";
  }
}
person Win    schedule 15.04.2011
comment
я использую server.mappath в функции getIcon, чтобы вернуть правильный URL-адрес. - person Khalid Rahaman; 15.04.2011
comment
Вам не нужен Server.MapPath в методе getIcon. Я отредактировал ответ. - person Win; 15.04.2011

Вы должны убедиться, что fm.getIcon на самом деле возвращает действительный URL-адрес для изображения значка, а не путь к файлу на уровне компьютера. Вы должны иметь возможность взять вывод fm.getIcon и вставить его в браузер и увидеть изображение. Права доступа к файлам могут быть проблемой, процесс IIS, обслуживающий веб-сайт, должен иметь возможность читать файлы изображений значков.

person AUSteve    schedule 14.04.2011
comment
Я могу подтвердить, что путь правильный и файл существует с правильными разрешениями - person Khalid Rahaman; 15.04.2011
comment
На самом деле на окончательной отображаемой странице, когда я просматриваю исходный код, пути также верны. - person Khalid Rahaman; 15.04.2011