Asp:中继器图像

时间:2011-04-22 21:48:11

标签: asp.net asp.net-ajax

嗨,

我很难理解这个example。 asp:repeater在哪里拍摄产品图片?这条路是什么?

我的问题是:

1)背景图像从哪里拍摄图像,这条路径是什么? 2)如何将图像存储在数据库中并相应地将它们分配给每个产品(例如,使用product_ID将图像与产品绑定?

代码:

background-image: url('<%# Eval("ProductID", "../../../Img/Northwind/Products/{0}.jpg") %>');">

最诚挚的问候。

2 个答案:

答案 0 :(得分:1)

关于你的问题。 从技术上讲,转发器不是“拍摄”图像。它正在生成CSS,并引用了背景图像。然后,显示页面的浏览器负责解析路径并检索/显示图像。在这种情况下,图像位于找到页面的位置的“向上”几个目录中。

对于提供存储在数据库中的图像,您有几个选择。

最常见的方法是构建图像处理程序;一个简单的ashx泛型处理程序很好地解决了这个问题。

让处理程序通过查询字符串接受productId,使用productId从数据库中获取blob,然后将具有正确内容类型的blob写入响应流。

处理程序完成后,您可以通过引用处理程序来引用图像:

background-image: url('<%# Eval("ProductID", "/ImageHandler.ashx?ProductId={0}") %>');">

编辑:为了回应你的评论,快速而肮脏的处理程序看起来与此类似。 显然,您需要添加实际逻辑以从数据库中获取blob。

public class ImageHandler : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        int productId;
        if (!int.TryParse(context.Request["productId"], out productId))
        {
            context.Response.End();
            return;
        }

        byte[] blob = null; // get blob from DB

        context.Response.ContentType = "image/jpeg";
        context.Response.BinaryWrite(blob);
        context.Response.End();
    }

    public bool IsReusable { get { return false; } }
}

答案 1 :(得分:0)

  

1)背景图像从哪里拍摄图像,这条路径是什么?

这是引用硬盘驱动器上的物理文件夹。该文件夹有一组名为1.jpg,55.jpg等的图像,与产品ID相匹配。在这个示例中,它们可能只是手动创建,但您可以构建一个图像上载系统,该系统将保存与您的产品的产品ID同名的图像文件。

  

2)如何将图像存储在数据库中并相应地将它们分配给每个产品(例如,使用product_ID将图像与产品绑定?

将图像存储在数据库中与此处的内容不同。正如我所说,这只是构建一个与产品ID同名的文件的路径。您可以将图像保存在数据库中,但我认为这与您正在查看的图像有所不同。

基本上,您的查询的答案是,在示例中,他们没有向您展示如何构建一个系统,该系统可以让您将产品添加到数据库并上传图像。它只是向您展示了如何基于现有的数据库信息和现有图像构建一些HTML。