残念ながら、ImageHandler.ashx と呼ばれるリピーターとジェネリック ハンドラーを使用して画像を表示することはできません。
これが私のコードです(ところで、この汎用ハンドラーをリピーターと組み合わせて使用してデータベースから画像を取得するのはこれが初めてで、ここで立ち往生しています)。
これが私のコードです:
<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個のオブジェクトを取得していて、それぞれに画像があるため、ページ全体の読み込みが非常に遅くなります:(
私は解決策を上に投稿したので、これを閉鎖したと脅すことができます!