2

我有一个网页,其中有一个方法调用来在DataList控件中显示一些图像

MyImage.cs

class MyImage
{
    string Name { get; set; }
    byte[] Jpeg { get; set; } 
}

MyImages.aspx.cs

public void DisplayMyImages(IEnumerable<MyImage> myImages)
{
    this.myImagesDataList.DataSource = myImages;
    this.myImagesDataList.DataBind();  
}

/// ...

protected void myImagesDataList_ItemDataBound(object sender, DataListItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item ||
        e.Item.ItemType == ListItemType.AlternatingItem)
    {
        MyImage myImage = (MyImage)e.Item.DataItem;
        Image myImageImage = (Image)e.Item.FindControl("myImageImage");

        // How to pass myImage.Jpeg to ImageHandler? form here

        myImageImage.ImageUrl = "~/Handlers/ImageHandler.ashx";
    }
}

ImageHandler但是如果已经从数据库中提取并传递给DisplayMyImages()函数,如何传递 jpeg 图像呢?

评论:

我不想将它们保存回文件并将查询字符串中的路径传递给ImageHandler

无法使用标准查询字符串方法,因为我不想违反模型视图演示者方法

4

4 回答 4

1

我刚刚在 CodeProject 上回答了您的问题,但我也会在此处复制答案。

根据图像的大小以及需要支持的浏览器,您也许可以使用数据 URI

myImageImage.ImageUrl = "data:image/jpeg;base64," + Convert.ToBase64String(myImage.Jpeg);

(如果您使用的是 IE8,则限制为 32Kb;根本不支持早期版本的 IE。)

于 2012-10-22T17:11:27.700 回答
1

Normaly 图像应该由 ImageHandler 生成而不是传递给,所以只需翻转你的逻辑。你最终会得到这样的东西:

myImageImage.ImageUrl = "~/Handlers/ImageHandler.aspx?id=yourImageId";

确保设置正确的内容类型,如下所示:

context.Response.ContentType = "image/png";

这就是您编写图像以响应的方式:

byte[] fileData = null;
//TODO: load your image data into fileData!
context.Response.BinaryWrite(fileData);
于 2012-10-22T14:25:17.560 回答
0

传入图像的 ID 并在需要时直接从数据库中检索它并使用类似于的代码会更容易;

var data = //Code to retrieve byte[];

int len = data.Length;
response.ContentType = "image/png";
response.BinaryWrite(data);
于 2012-10-22T14:27:56.917 回答
0

首先我认为你可能会出错

myImageImage.ImageUrl = "~/Handlers/ImageHandler.aspx";    

注意:您需要在非文件中包含 ImageHandler.ashx文件.aspx.ashx Generic Handler从 ImageHandler 检索图像时,它在上下文中用作图像。这是 ImageHandler 文件的正确格式。

imgProfile.ImageUrl = "ImageHandler.ashx?imgid=" + imageId.ToString();

点击这里查看完整的参考。

希望,它可以帮助你。!!

于 2012-10-22T15:34:11.733 回答