1

我有一个网络表单站点,用户在其中上传文件,文件名等保存到数据库。这些文件然后显示在数据列表中。我试图让这个数据列表显示不同的图像(图标)来表示文件类型。

这是我背后的代码。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 替换为图像的硬编码路径,它可以正常工作。

我错过了什么?

4

2 回答 2

1

您应该确认它fm.getIcon实际上返回了图标图像的有效 URL,而不是机器级文件路径。您应该能够获取输出fm.getIcon并将其粘贴到浏览器中并查看图像。文件权限可能是一个问题,服务于网站的 IIS 进程需要能够读取图标图像文件。

于 2011-04-14T23:53:03.223 回答
1

请试试这个。

// 第一种方法

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

FileInfo fileInfo = new FileInfo(fileLocation);

string fileExtension = fileInfo.Extension;

// 第二种方法

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";
  }
}
于 2011-04-15T04:18:03.873 回答