【问题标题】:How to find a control located inside datalist itemtemplate, on a Page_Load event?如何在 Page_Load 事件中找到位于 datalist itemtemplate 内的控件?
【发布时间】:2012-05-29 20:53:23
【问题描述】:

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

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

但结果相同,始终为空。

请指点我正确的方向。

【问题讨论】:

    标签: c# asp.net datalist listitem


    【解决方案1】:

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

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

    这将在每个DataListItem中找到控件

    【讨论】:

    • 看起来代码能够找到 ImageButton 但仍然无法注册我使用的类似:if (dtlSearchDetails.Items.Count &gt; 0) { foreach (DataListItem li in dtlSearchDetails.Items) { ImageButton img = (ImageButton)li.FindControl("dtlImgDownload"); ScriptManager.GetCurrent(this.Page).RegisterPostBackControl(img); break; } }
    • 别介意它的工作看起来像其他问题,非常感谢蒂姆的时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多