无法在gridview中显示图像

时间:2009-11-14 13:34:40

标签: asp.net

我有这个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

在这个目录下我也有图像。 我在网格中获取图像名称但图像未显示。 这是一件容易的事情,但我仍然无法实现它。 我哪里错了?

4 个答案:

答案 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目录中。 我看到它有时指向旧的路径,这会产生问题。