Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';在asp.net中继器中找不到控件?_C#_Asp.net_Repeater - Fatal编程技术网

C# Can';在asp.net中继器中找不到控件?

C# Can';在asp.net中继器中找不到控件?,c#,asp.net,repeater,C#,Asp.net,Repeater,我有下面的中继器,我试图在代码隐藏中找到lblA,但失败了。下面是我所做的尝试: <asp:Repeater ID="rptDetails" runat="server"> <HeaderTemplate> <table> </HeaderTemplate> <ItemTemplate> <tr> <td><strong>

我有下面的中继器,我试图在代码隐藏中找到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>
但lblA是无效的

然后我试着

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

但是Items是0,即使m repeater包含1个itemtemplate

您需要设置属性
OnItemDataBound=“myFunction”

然后在代码中执行以下操作

void myFunction(object sender, RepeaterItemEventArgs e)
{
   Label lblA = (Label)e.Item.FindControl("lblA");
}
顺便提一下,您可以对嵌套中继器使用完全相同的方法。即:

<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>
我经常看到人们在内部转发器上手动绑定项目,但他们没有意识到为自己做事情有多么困难。

研究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

您应该先绑定。
(例如)


我也有同样的问题

在项目中循环时,我们缺少项目类型。中继器中的第一项是标题,标题中没有我们要查找的asp元素

试试这个:

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

我有点困惑。我实际上在做的是,当我点击一个页面上的查看详细信息链接时,它会将我带到另一个页面上的详细视图,该页面上有转发器,在页面加载中,我试图找到lblAEdited。希望这能解释更多。好吧,我最后做的是将DataTable变量移动到类的顶层。然后我创建了ItemDataBoundEvent,在那里我检查了repeater中的lblA,如果它找到了它,就将它设置为我从DataTable中的一行返回的一些文本。我对这一点的理解正确吗?谢谢,我想一个简单的问题是,为什么我有一个项目模板却返回0个项目?我不太确定。我从不直接在中继器中访问项目,所以我不确定它们的行为。谢谢,老兄,我也有同样的问题,我花了很多时间来解决这个问题。太棒了!!同上-这真的应该包括在MSDNs自己的示例中。。。但是我们应该从中期待什么呢??
    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
rptDetails.DataSource = dataSet.Tables["Order"];

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