0

ユーザーがダウンロードアイコンをクリックすると、画像のサムネイルとその下にダウンロードアイコンが表示されるデータリストがあり、システムはクライアントの場所にある画像をダウンロードします。

<asp:DataList ID="dtlSearchDetails" runat="server" OnItemCommand="dtlSearchDetails_ItemCommand" OnItemDataBound="dtlSearchDetails_ItemDataBound">
                            <ItemTemplate>
                                <asp:ImageButton runat="server" ID="dtlImageCol" ImageUrl='<%# "~/uploads/thumbnails/" + Eval("ImageName") %>' /><br />
                                <asp:Label runat="server" ID="dtusage" Text='<%# Eval("usage") %>' Style="color: #CC121B;"></asp:Label><br />
                                <asp:ImageButton runat="server" ID="dtlImgDownload" CommandName="dtlImgDownload" CommandArgument='<%# Eval("ImageName") %>' ImageUrl="images/download.png" style="height:20px; width:20px;"/>&nbsp;
                            </ItemTemplate>
                        </asp:DataList>

すべてがうまく機能しますが、問題は datalist が updatepannel 内にラップされているため、ユーザー側で画像をダウンロードするには、Page_Load イベントでコントロールを登録する必要があることです。

ScriptManager.GetCurrent(this.Page).RegisterPostBackControl(dtlImgDownload);

はデータリスト内にあるためdtlImgDownload、常にエラーが発生します"The name dtlImgDownload doesn't exists in current context."

コントロールを見つけるためにいくつかの方法を試しましdtlSearchDetails.FindControl("dtlImgDownload ") たが、常に null を返します。

私も試しました

if(dtlSearchDetails.FindControl("dtlImgDownload ") != null)
        {
            ScriptManager.GetCurrent(this.Page).RegisterPostBackControl(dtlSearchDetails.FindControl("dtlImgDownload "));
        }

しかし、結果は同じで、常に null です。

親切に私を正しい方向に向けてください。

4

1 に答える 1

1

Bindまず、が必要ですDataList。この後、それぞれの をループする必要がありますDataListItemsDataList

foreach ( DataListItem li in dtlSearchDetails.Items )
{
    ImageButton imgButton = (ImageButton) li.FindControl("dtlImgDownload");
}

これにより、それぞれのコントロールが見つかりますDataListItem

于 2012-05-29T12:53:23.887 に答える