C#ASP.net使用HTTPHandler将图像从列表绑定到GridView
我目前有一个gridview,应该使用自定义HttpHandler填充多个图像预览。我已经有物品清单了。问题是,每当我尝试实现绑定时,所有被绑定的图像都来自项目列表的最后一个条目,而不考虑其他项目。我想知道为什么会这样 MyHandler.ashx:C#ASP.net使用HTTPHandler将图像从列表绑定到GridView,c#,asp.net,httphandler,C#,Asp.net,Httphandler,我目前有一个gridview,应该使用自定义HttpHandler填充多个图像预览。我已经有物品清单了。问题是,每当我尝试实现绑定时,所有被绑定的图像都来自项目列表的最后一个条目,而不考虑其他项目。我想知道为什么会这样 MyHandler.ashx: List<string> items = new List<string>(); items = ItemManager.GetImages(); public void ProcessRequest (HttpCon
List<string> items = new List<string>();
items = ItemManager.GetImages();
public void ProcessRequest (HttpContext context) {
WebClient client = new WebClient();
if (items.Count > 0)
{
foreach (var a in items)
{
byte[] buff = client.DownloadData(a);
context.Response.ContentType = "image/jpeg";
context.Response.AddHeader("content-length", buff.Length.ToString());
context.Response.BinaryWrite(buff);
}
}
}
public bool IsReusable {
get {
return false;
}
}
List items=newlist();
items=ItemManager.GetImages();
公共void ProcessRequest(HttpContext上下文){
WebClient客户端=新的WebClient();
如果(items.Count>0)
{
foreach(项目中的var a)
{
字节[]buff=客户端下载数据(a);
context.Response.ContentType=“image/jpeg”;
context.Response.AddHeader(“content-length”,buff.length.ToString());
context.Response.BinaryWrite(buff);
}
}
}
公共布尔可重用{
得到{
返回false;
}
}
Gridview.aspx
<asp:GridView ID="gv1" style="text-align:center;" PageSize="6" Width="100%" AutoGenerateColumns="false" runat="server" BackColor="White" BorderColor="Black" BorderStyle="None" BorderWidth="1px" CellPadding="10"
AllowPaging="true">
<Columns>
<asp:ButtonField ButtonType="Button" CommandName="Select" ControlStyle-Width="100" ControlStyle-Height="30" Text="Update" HeaderText="Update"/>
<asp:ButtonField ButtonType="Button" CommandName="Delete" ControlStyle-Height="30" Text="Delete" HeaderText="Delete"/>
<asp:BoundField DataField="a" HeaderText="ID" />
<asp:BoundField DataField="b" HeaderText="Title" />
<asp:TemplateField>
<ItemTemplate>
<img src="MyHandler.ashx" class="gridview-imgPreview" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="c" HeaderText="Caption" />
<asp:BoundField DataField="d" HeaderText="Description" />
</Columns>
您在哪里告诉处理程序要显示哪个图像?处理程序代码看起来像是重新获取整个图像列表并返回所有图像。这将导致客户端只接收到第一个或最后一个文件,这取决于底层系统如何处理您在一个响应中返回多个文件的尝试。我相信它位于以下块:foreach(项目中的var a){byte[]buff=client.DownloadData(a);context.Response.ContentType=“image/jpeg”;context.Response.AddHeader(“content-length”,buff.length.ToString());context.Response.BinaryWrite(buff);}
还是我遗漏了什么?你肯定遗漏了什么。那个块叫做循环。它迭代所有记录,并对所有记录重复相同的操作。您的img
标记实际上没有告诉处理程序要显示哪个图像。您可能应该在src
URL中包含记录的ID,然后在处理程序中读取该ID以仅获取一个图像代码>将在列表中的每个项目中写入图像文件。或者有没有其他方法可以在不包含ID的情况下实现这一点?它只写一个条目。在循环中这样做会写入所有项。你知道什么是循环吗?看起来你只是随机地指向代码行,猜测“这一行一定是问题所在”。问题在于指向处理程序的链接没有告诉处理程序要显示哪个图像,而处理程序正试图显示所有图像。我不完全记得旧web表单中的语法,但您需要在图像URL中传递ID。然后,您可以在处理程序中使用该ID来查找正确的图像。