【问题标题】:Cant find control inside repeater item在中继器项目中找不到控件
【发布时间】:2013-04-24 14:41:09
【问题描述】:

我正在使用中继器:

<asp:Repeater ID="rptCategories" runat="server" OnItemDataBound="RptCategories_ItemDataBound">
            <ItemTemplate>
                <asp:Panel CssClass="category-wrapper" ID="pnlCategory" runat="server">
                    <%# Eval("SponsorshipCategoryName") %>
                    <asp:HiddenField runat="server" ID="hdnCategoryID" Value='<%# Eval("SponsorshipCategoryID") %>' />
                </asp:Panel>
            </ItemTemplate>
        </asp:Repeater>

根据我的类别类型,我将RadionButtonList 或复选框列表添加到后面代码的面板中。

我设置了id:

rblItems.ID = "rbl_" + category.SponsorshipCategoryID;

然后把控制权放在panel:

panel.Controls.Add(rblItems);

现在我需要能够遍历所有类别面板并获取那些单选按钮列表或复选框。

为此我循环rptCategories.Items

  foreach (RepeaterItem rptItem in rptCategories.Items)
           {
               var hdnCategoryID = rptItem.FindControl(HdnCategoryID_ID) as 
                  HiddenField;
               var pnlCategory = rptItem.FindControl(PnlCategory_ID) as Panel;
               var categoryID = (hdnCategoryID == null || hdnCategoryID.Value == 
               string.Empty) ? 0 : int.Parse(hdnCategoryID.Value);
           }

它找到隐藏字段和面板就好了。但是,当我试图在我的面板中找到具有我感兴趣的 ID 的控件时,它会返回 null。

var control = pnlCategory.FindControl("rbl_" + categoryToUpdate.SponsorshipCategoryID);

我不能在这里使用项目数据绑定事件。任何想法可能是什么问题?

【问题讨论】:

  • 尝试添加 ClientIDMode="Static"
    ​​

标签: asp.net repeater


【解决方案1】:

这可能是两个问题之一(或两者兼而有之):

  1. 您正在动态添加控件:panel.Controls.Add(rblItems)。为了让您能够检索这些动态添加的控件,必须在每次回发时重新添加它们。恕我直言,添加动态添加控件的最佳位置是在 OnInit() 事件期间。

  2. 正如@skhurams 所指出的:动态添加的控件的 ID 可能存在问题。尽管您为每个控件显式设置了 ID,但中继器会自动更改这些 ID,以确保在特定页面上没有重复 ID。查看是否是这种情况的最佳方法是查看生成的网页的来源。检查 ID 是否与您期望的不同。您可以选择将ClientIDMode 设置为“静态”,但要确保每个 ID 真正唯一。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 2010-12-16
    相关资源
    最近更新 更多