无法从后面的代码访问中继器中的控件

本文关键字:访问 中继器 控件 代码 | 更新日期: 2023-09-27 18:17:18

我正在尝试从我的代码后面的文件访问asp重复器内的asp标签。以下是我到目前为止所做的:

    <asp:Repeater ID="Repeater1" runat="server" DataSourceID="LinqDataSource1" OnItemDataBound="outerFunction">
        <HeaderTemplate>
            <h1>Questions And Answers</h1>
        </HeaderTemplate>
        <ItemTemplate>
             <p style="background-color:Red; color:Yellow;"><%#Eval("QText") %> :::::::::</p>
            <asp:HiddenField ID="HiddenField1" runat="server" Value='<%# setQID(Eval("QID"))%>' />
            <asp:Label ID="pageLabel" runat="server" Text="Label"></asp:Label>
             <asp:Repeater ID="Repeater1" runat="server" DataSourceID="LinqDataSource2">
                 <HeaderTemplate>
                 </HeaderTemplate>
                 <ItemTemplate>

                    <%# (GetAnswer(Eval("AnsQID"))) != 1 ? (displayAnswer(Eval("AText"))) : ""%>

                </ItemTemplate>
                <FooterTemplate>
                </FooterTemplate>
            </asp:Repeater>
            <span style="display:block; border-top:1px solid Gray;"></span>
        </ItemTemplate>
    </asp:Repeater>

*下面是*

后面的代码
public void outerFunction(object sender, RepeaterItemEventArgs  e)
    {
       Label myLabel =  (Label) e.Item.FindControl("pageLabel");
       myLabel.Text = "HELLO World";
    }

我正在尝试显示问题和答案。每个问题都可以有多个答案。这就是为什么我有它在一个嵌套的重复器控制。现在我只需要知道我怎么能说,例如,有一个"div"元素在外部中继器和绑定每个答案我得到在内部中继器的父div。

谢谢!

无法从后面的代码访问中继器中的控件

你的代码看起来不错,除了你没有检查你所在行的类型:

public void outerFunction(object sender, RepeaterItemEventArgs  e)
 {
      if(e.Item.ItemType==ListItemType.Item || e.Item.ItemType==ListItemType.AlternatingItem)
      {
         Label myLabel =  (Label) e.Item.FindControl("pageLabel");
         myLabel.Text = "HELLO World";
      }
 }

因为你有一个头模板不包含"pageLabel",当重复器的那部分是数据绑定时,你会得到一个空引用错误。

将标签部分放在if块中:

if (e.Item.ItemType == ListItemType.Item)
{
...
}

如果你使用了AlternatingItemTemplate,你也需要包含它:

if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
    ...
    }

当当前处理的项目是页眉或页脚时,您现在所做的方式是不安全的,标签在ItemTemplate中,因此仅适用于数据项,尝试如下:

public void outerFunction(object sender, RepeaterItemEventArgs  e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        Label myLabel =  (Label) e.Item.FindControl("pageLabel");
        myLabel.Text = "HELLO World";
    }
}