2011-04-14 74 views
1

我有一个webforms站点,用户上传文件,文件名等被保存到数据库。这些文件然后显示在数据列表中。我试图让这个datalist显示不同的图像(图标)来表示文件类型。从服务器端动态设置图像控制图像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替换为图像的硬编码路径,它工作正常。

我在想什么?

回答

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"; 
    } 
} 
+0

我使用getIcon函数中的server.mappath返回正确的URL。 – 2011-04-15 14:26:53

+0

您不需要getIcon方法中的Server.MapPath。我编辑了答案。 – Win 2011-04-15 14:57:39

1

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

+0

我可以证实,路径是正确和文件确实存在与正确的权限 – 2011-04-14 23:55:37

+0

事实上,在最终呈现的页面上,当我“查看源代码”的路径也是正确的 – 2011-04-15 00:16:26