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

#asp.net #datalist #databound #asp.net-controls #datalistitem

#asp.net #datalist #привязка к базе данных #asp.net-элементы управления #datalistitem

Вопрос:

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

Это мой код, лежащий в основе. 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 жестко заданным путем к изображению, он работает нормально.

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

Ответ №1:

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

// 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";
  }
}
  

Комментарии:

1. я использую server.mappath в функции getIcon для возврата правильного URL.

2. Вам не нужен сервер. MapPath в методе getIcon. Я отредактировал ответ.

Ответ №2:

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

Комментарии:

1. Я могу подтвердить, что путь указан правильно и файл существует с правильными разрешениями

2. Фактически, на конечной отображаемой странице, когда я «Просматриваю исходный код», пути также правильные