不幸的是,我无法使用我称为 ImageHandler.ashx 的 repater 和通用处理程序显示我的图像,可能我做错了什么,我自己无法发现错误。
这是我的代码(顺便说一句,这是我第一次将这个通用处理程序与转发器结合使用从数据库中获取我的图像,我被困在这里)。
这是我的代码:
<table class="table table-hover" style="margin-top: 50px; background-color: white;">
<tr>
<th>Name</th>
<th>Last Name</th>
<th>Photo</th>
</tr>
<asp:Repeater ID="repPlayers" runat="server" OnItemCommand="repPlayers_ItemCommand">
<ItemTemplate>
<tr>
<td><%# Eval("Name") %></td>
<td><%# Eval("LastName") %></td>
<td>
<asp:Image ID="imageTest" src="~/ImageHandler.ashx?id=PlayerID" runat="server" />
<%--<img id="imageTest" style="width: 60px; height: 30px;" src="data:image/png;base64, <%# Convert.ToBase64String((byte[])Eval("Photo")) %> " />--%>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
ImageHandler.ashx 后面的代码:
public class ImageHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
int playerID = Convert.ToInt32(context.Request["PlayerID"]);
Players.Data.DataAccess player = Players.Data.DataAccess.GetByPlayerId(playerID);
context.Response.ContentType = "image/jpeg";
context.Response.BinaryWrite(player.Photo);
}
public bool IsReusable
{
get
{
return false;
}
}
}
可能我做错了什么,也许我应该'<%#Eval("PlayerID")%>'
以某种方式或其他方式结合起来?如果我使用数据网格,我会使用 Item_dataBound 控件,这可以解决我的问题,但不幸的是,我正在将我的数据加载到表中,我不知道如何解决这个问题。
编辑:我也试过了,这就是解决方案:
<asp:Image ID="imageTest" runat="server"
ImageUrl='<%#"~/ImageHandler.ashx?PlayerID="+Eval("PlayerID") %>' />
PS 注释代码有效,但它加载图像的速度非常慢,这使得我的整个页面加载速度非常慢,因为我从数据库中获取了 50 个对象,并且每个对象都有图像 :(
因为我在上面发布了解决方案,我们可以将其视为已关闭!