0

残念ながら、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個のオブジェクトを取得していて、それぞれに画像があるため、ページ全体の読み込みが非常に遅くなります:(

私は解決策を上に投稿したので、これを閉鎖したと脅すことができます!

4

1 に答える 1

0

// これが機能するように編集したものです。

<td>
    <asp:Image ID="imageTest" runat="server" style="width: 60px; height: 30px;"
       ImageUrl='<%#"~/ImageHandler.ashx?PlayerID="+Eval("PlayerID") %>' />
</td>
于 2016-09-25T00:02:27.053 に答える