在asp.net转发器中找不到控件?

我在下面有以下转发器,我试图在后面的代码中找到lblA并且它失败了。 标记下面是我的尝试:

  
A:

首先我试过,

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

但是lblA是空的

然后我试过,

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

但是物品是0,即使m转发器包含1个itemtemplate

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

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

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

顺便提一下,您可以对嵌套转发器使用这种完全相同的方法。 IE:

        

然后在你的代码中:

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

我经常看到人们手动绑定内部中继器上的物品,他们并没有意识到他们为自己制造物品有多困难。

我刚遇到同样的问题。

我们在循环项目时缺少项目类型 。 转发器中的第一个项目是标题 ,标题没有我们正在寻找的asp元素。

试试这个:

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

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 

调查Repeater.ItemDataBound事件 。

你应该先绑定。
例如)

 rptDetails.DataSource = dataSet.Tables["Order"]; rptDetails.DataBind();