繁体   English   中英

如何在Page_Load事件上找到位于数据列表itemtemplate内的控件?

[英]How to find a control located inside datalist itemtemplate, on a Page_Load event?

我有一个数据列表,其中显示图像的缩略图和其下的下载图标,当用户单击下载图标时,系统下载位于客户端位置的图像。

<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>

一切正常,只是问题在于数据列表包装在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 "));
        }

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

请指出正确的方向。

首先,您需要Bind DataList 然后,在此之后,您将需要遍历DataListItems中的每个DataList

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

这将在每个DataListItem找到控件

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM