【问题标题】:Getting an image off harddrive dynamically to display in gridview动态获取硬盘驱动器上的图像以在 gridview 中显示
【发布时间】:2014-06-05 10:39:26
【问题描述】:

我正在尝试从我的硬盘驱动器中动态获取图像,但我不能,因为即使正确创建了动态路径,它也不会显示。

这是因为我正在为网站创建后端系统。它将托管在同一个硬盘驱动器上,但后端需要访问用户添加的图像。

这样我们就可以在用户上传的内容在网站上“上线”之前对其进行筛选。

我在主站点上使用了此代码并对其进行了调整以在后端工作,但它不起作用。

当我显示页面时,图像不显示,但是如果我右键单击图像应该是的区域,那么它将允许我复制链接,当我将它放在地址栏中并且图像显示时.. 我难倒:(

有人可以看看我的代码,看看哪里出错了

下面的代码:

<div class="panel panel-default" style="background-color: #f3f3f3;">
    <div class="panel-body">
        <asp:DataList ID="_propertyImagesList" runat="server" RepeatColumns="4" RepeatDirection="Horizontal" CellPadding="16">
            <ItemTemplate>
                <div class="popup-gallery">
                  <a id="imageLink" href='<%# Eval("ImagePath","file:///C:/Development/main website/main website/PropertyImages/{0}") %>' runat="server" class="thumbnail" style="margin: 10px; min-height: 140px; min-width: 140px;">
                      <asp:Image ID="_propertyImage" ImageUrl='<%# Bind("ThumbPath", "file:///C:/Development/main website/main website/PropertyImages/{0}") %>' runat="server" CssClass="img-responsive" />
                  </a>
                </div>
            </ItemTemplate>
        </asp:DataList>
    </div>
</div>

c#

    protected void GetPropertyImages(int propertyId)
    {
        SqlCommand cmd = new SqlCommand("GetPropertyImages", conn);
        cmd.CommandType = System.Data.CommandType.StoredProcedure;

        SqlDataReader rdr;

        cmd.Parameters.Add("@PropertyId", System.Data.SqlDbType.Int).Value = propertyId;

        conn.Open();
        rdr = cmd.ExecuteReader();

        _propertyImagesList.DataSource = rdr;
        _propertyImagesList.DataBind();

        rdr.Close();
        conn.Close();
    }

【问题讨论】:

  • 任何带有 file:// 的东西都非常糟糕,不应该使用,永远......永远!您需要向我们提供绑定 DataList 的 c# 代码,我个人会使用 ItemDataBound 事件来绑定图像 url
  • Iv 添加了 c#。 c# 基本上向 sql 询问路径详细信息的结尾,以便标记可以找到并显示图像。我从不使用 file:// 但我想对其进行测试,即使这样也没有用。我只是似乎找不到方法。

标签: c# css asp.net gridview


【解决方案1】:

这是我在许多项目中都会做的和已经做过的,它未经测试,所以你可能需要调整一两件事来适应你的设置。我猜 C:\Development\main website\main website 是您网站的根目录。

注意:我还更改了 DataList 的 ID,这符合 Resharper 的命名约定。

<asp:DataList ID="PropertyImageList" runat="server" OnItemDataBound="PropertyImageList_ItemDataBound" RepeatColumns="4" RepeatDirection="Horizontal" CellPadding="16">
    <ItemTemplate>
        <div class="popup-gallery">
            <asp:HyperLink runat="server" ID="PropertyImageLink" CssClass="thumbnail" Style="margin: 10px; min-height: 140px; min-width: 140px;">
                <asp:Image runat="server" ID="PropertyImage" CssClass="img-responsive" />
            </asp:HyperLink>
        </div>
    </ItemTemplate>
</asp:DataList>

C#

protected void PropertyImageList_ItemDataBound(object sender, DataListItemEventArgs e)
{
    var data = e.Item.DataItem as DbDataRecord;
    if (data == null)
        return;

    var link = e.Item.FindControl("PropertyImageLink") as HyperLink;
    var image = e.Item.FindControl("PropertyImage") as Image;

    if (link == null || image == null)
        return;

    image.ImageUrl = "~/PropertyImages/" + data["ImagePath"];
    link.NavigateUrl = "~/PropertyImages/" + data["ThumbPath"];
}

【讨论】:

  • 主网站不是正在实施的网站的根。我在不同的解决方案中使用它,但两者都在同一个硬盘驱动器/服务器上。这就是为什么要定义整体。如果我将 url 调整为完整的 c:/ 路径,这仍然有效吗?
  • 我只想说不!如果 PropertyImages 目录不可浏览,那么除非您使用服务器,否则您的解决方案将无法工作……这是一种糟糕的做法。您可以将 PropertyImage 文件夹设为虚拟目录?!?
  • 我已经将图像下载为文件了吗?但我无法让它们显示在网站上。我听说过这个虚拟目录,但不确定如何实现它
猜你喜欢
  • 2012-03-23
  • 1970-01-01
  • 1970-01-01
  • 2019-04-07
  • 1970-01-01
  • 2011-02-07
  • 2017-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多