如何在Page_Load事件中找到位于datalist itemtemplate内的控件?

时间:2012-05-29 12:34:06

标签: c# asp.net datalist listitem

我有一个显示图像缩略图和下载图标的数据列表,当用户点击下载图标时,系统下载是客户所在位置的图像。

<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 "));
        }

但同样的结果,它总是为空。

请指出正确的方向。

1 个答案:

答案 0 :(得分:1)

首先,您需要Bind DataList。然后,您需要遍历DataListItems

中的每个DataList
foreach ( DataListItem li in dtlSearchDetails.Items )
{
    ImageButton imgButton = (ImageButton) li.FindControl("dtlImgDownload");
}

这将在每个DataListItem

中找到控件