#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. Фактически, на конечной отображаемой странице, когда я «Просматриваю исходный код», пути также правильные