我有这个ASP.NET代码:
<asp:GridView ID="gvImages" runat="server" AutoGenerateColumns="False" CellPadding="4"
ForeColor="#333333" GridLines="None">
<Columns>
<asp:ImageField DataImageUrlField="image" >
</asp:ImageField>
<asp:BoundField DataField="imagename" />
</Columns>
</asp:GridView>
protected void Page_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString);
SqlCommand command = new SqlCommand("SELECT * from [Image]", connection);
SqlDataAdapter ada = new SqlDataAdapter(command);
ada.Fill(dt);
gvImages.DataSource = dt;
gvImages.DataBind();
}
在数据表中,我将imagename和image作为包含值的列
blue F:\R&D\RD\RD\Images\nextlabel.gif
red F:\R&D\RD\RD\Images\fDSC03578.JPG
green F:\R&D\RD\RD\Images\fDSC03556.JPG
在这个目录下我也有图像。 我在网格中获取图像名称但图像未显示。 这是一件容易的事情,但我仍然无法实现它。 我哪里错了?
答案 0 :(得分:3)
您尝试从Web服务器访问本地路径F:\R&D\RD\RD\Images\nextlabel.gif
时,在客户端无法访问Web服务器的情况下,您无法执行此操作。您可以将目录F:\R&D\RD\RD\Images\
映射到位于Web服务器上的虚拟目录。通过这种方式,您可以在根目录下创建一个虚拟目录,例如引用mysite.com/images
位置的F:\R&D\RD\RD\Images\
。
创建虚拟目录后,您可以引用该目录中的图像,就好像它们是相对于Web服务器的一样。为了完成这项工作,您还必须能够修改数据库中的图像以仅存储文件名,或者在路径上进行一些处理以获取文件名。
<asp:ImageField DataImageUrlField="image" DataImageUrlFormatString="~/images/{0}">
</asp:ImageField>
以下是关于How to: Create and Configure Virtual Directories in IIS 5.0 and 6.0的文章或您使用IIS 7.0的文章。请注意为虚拟目录正确配置安全性和身份验证。
处理此问题的另一种方法是创建自定义HTTP handler以从文件系统或数据库提供图像。 Here's使用HTTP处理程序从数据库加载图像的示例here's显示如何从文件系统中提取图像的示例。
答案 1 :(得分:0)
我很确定使用像这样的图像字段图像需要“在网络上”,以便用户浏览器可以加载它。如果图像不在Web可访问目录中,那么您将需要使用具有内容类型图像的.aspx文件并将图像加载到自身中(对于繁忙站点而言相当昂贵)。
答案 2 :(得分:0)
在表格中保存图像的绝对路径是不明智的...因为它绑定到您当前的文件系统...在您的图像网址字段中,您应该只有图像的名称... 所以...
将图像从本地磁盘复制到服务器目录,例如your_app / images / 将图片中的图片网址更改为图片名称,例如:
nextlabel.gif
将gridview的标记更改为:
<asp:imagefield dataimageurlfield="image"
dataimageurlformatstring = "~/images/{0}"/>
希望这会有所帮助
答案 3 :(得分:0)
如果您已将图像从其他路径复制到项目的Image目录,只需从原始路径中删除该图像,并仅将该副本保留在Image目录中。 我看到它有时指向旧的路径,这会产生问题。