找不到asp.net中继器内的控制?(Can't find control within a

2019-06-27 04:43发布

下面我有以下的中继器,我试图在代码中找到LBLA后面,它失败。 下面的标识是我所做出的尝试:

<asp:Repeater ID="rptDetails" runat="server">
    <HeaderTemplate>
        <table>
    </HeaderTemplate>
    <ItemTemplate>
        <tr>
            <td><strong>A:</strong></td>
            <td><asp:Label ID="lblA" runat="server"></asp:Label>
            </td>
        </tr>
    </ItemTemplate>
</asp:Repeater>
</table>

首先,我试过了,

Label lblA = (Label)rptDetails.FindControl("lblA");

但LBLA为空

然后我试过了,

Label lblA = (Label)rptDetails.Items[0].FindControl("lblA");

但项目为0,即使第M中继器包含1周的ItemTemplate

Answer 1:

您需要设置属性OnItemDataBound="myFunction"

然后在你的代码执行以下操作

void myFunction(object sender, RepeaterItemEventArgs e)
{
   Label lblA = (Label)e.Item.FindControl("lblA");
}

顺便说一句,你可以使用嵌套中继此完全相同的方法。 IE:

<asp:Repeater ID="outerRepeater" runat="server" OnItemDataBound="outerFunction">
<ItemTemplate>
   <asp:Repeater ID="innerRepeater" runat="server" OnItemDataBound="innerFunction">
   <ItemTemplate><asp:Label ID="myLabel" runat="server" /></ItemTemplate>
   </asp:Repeater>
</ItemTemplate>
</asp:Repeater>

然后在你的代码:

void outerFunction(object sender, RepeaterItemEventArgs e)
{
   Repeater innerRepeater = (Repeater)e.Item.FindControl("innerRepeater");
   innerRepeater.DataSource = ... // Some data source
   innerRepeater.DataBind();
}
void innerFunction(object sender, RepeaterItemEventArgs e)
{
   Label myLabel = (Label)e.Item.FindControl("myLabel");
}

很多时候我看到人们在其内转发手动绑定表项,他们不知道有多难,他们正在为自己做的事情。



Answer 2:

我有同样的问题。

我们缺少的项目类型 ,而在项目循环。 在转发的第一个项目是标题和标题没有我们要找的ASP元素。

试试这个:

if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {Label lblA = (Label)rptDetails.Items[0].FindControl("lblA");}


Answer 3:

代码VB.net

    Protected Sub rptDetails_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles rptDetails.ItemDataBound    
      If e.Item.ItemType = ListItemType.AlternatingItem Or e.Item.ItemType = ListItemType.Item Then
        Dim lblA As Label = CType(e.Item.FindControl("lblA"), Label)
        lblA.Text = "Found it!"
      End If
    End Sub


Answer 4:

调查Repeater.ItemDataBound事件 。



Answer 5:

你应该先绑定。
例如)

rptDetails.DataSource = dataSet.Tables["Order"];

rptDetails.DataBind();


文章来源: Can't find control within asp.net repeater?