我有一个网页,其中包含一个名为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";
}
}
但如果jpeg图像已从数据库中提取并传递给ImageHandler
函数,如何将jpeg图像传递给DisplayMyImages()
?
说明:
我不想将它们保存回文件并将查询字符串中的路径传递给ImageHandler
无法使用标准查询字符串方法,因为我不想违反模型视图演示方法
答案 0 :(得分: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);
答案 1 :(得分:1)
我刚回答your question on CodeProject,但我也会在这里复制答案。
根据图片的大小以及您需要支持的浏览器,您可以使用data URI。
myImageImage.ImageUrl = "data:image/jpeg;base64," + Convert.ToBase64String(myImage.Jpeg);
(如果您使用的是IE8,则限制为32Kb;根本不支持早期版本的IE。)
答案 2 :(得分:0)
传递图像的ID并在需要时直接从数据库中检索并使用类似的代码会更容易;
var data = //Code to retrieve byte[];
int len = data.Length;
response.ContentType = "image/png";
response.BinaryWrite(data);
答案 3 :(得分:0)
首先,我认为你可能会出错
myImageImage.ImageUrl = "~/Handlers/ImageHandler.aspx";
注意:您需要包含带有.ashx
而不是.aspx
文件的ImageHandler文件。 .ashx Generic Handler
在从ImageHandler检索图像时作为上下文图像。这是ImageHandler文件的正确形式。
imgProfile.ImageUrl = "ImageHandler.ashx?imgid=" + imageId.ToString();
click here to see complete referece.
希望,它可能对你有所帮助。 !!