1

我正在使用中继器:

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

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

4

1 回答 1

2

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

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

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

于 2013-04-24T17:12:02.617 回答