C# Can';在asp.net中继器中找不到控件?
我有下面的中继器,我试图在代码隐藏中找到lblA,但失败了。下面是我所做的尝试: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>
<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");}