如何访问文本框,使用asp.net Web表单从代码后面的更新面板内标签

我在更新面板中定义了一些绑定到转发器控件的控件。 我需要隐藏并显示基于匿名字段的用户名和国家/地区,但问题是我无法以编程方式访问更新面板中定义的控件。

我怎样才能访问这些控件,我在网上看了一下但找不到很多引用

以下是aspx页面和.cs页面的代码

  
<asp:Label ID="lblComPostDate" runat="server" Text=''>
<asp:Label ID="lblComMSGDetails" runat="server" Text=''>
<asp:Label ID="lblComUserName" runat="server" Text=''>, <asp:Label ID="lblComCountry" runat="server" Text=''> <asp:Label ID="lblUserAnonymous" runat="server" Text='' Visible=false>

代码背后

 protected string FormatCommentDate(object dt) { string date; date = String.Format("{0:hh:mm, MMMM dd, yyyy}", dt); return date; } protected string showUserName(object userName) { String str=null; try { Boolean isUserAnonymous = Convert.ToBoolean(userName); if (isUserAnonymous == true) { // Not able to access lblComUserName CONTROL here } } catch (Exception ex) { } return str; } 

function使用Pager和Repeater控件绑定转发器控件

 protected void getCommentsList(int iArticleID) { try { PagerControl1.PageSize = 4; //PagerControl1.TotalItems = 1; //PagerControl1.PageMode = 4; PagerControl1.DisplayEntriesCount = 5; //Will show 2 links after ... PagerControl1.EdgeEntriesCount = 0; DataSet ds = DataProvider.GetCommentList(iArticleID); DataView dv = ds.Tables[0].DefaultView; //pass the datatable and control to bind PagerControl1.BindDataWithPaging(rptCommentList, dv.Table); } catch (Exception ex) { HttpContext.Current.Response.Redirect("Message.aspx?msg=Invalid Request"); } 

问题不在于UpdatePanel ,而在于Repeater 。 更新面板内的控件可以在页面范围内直接访问(例如转发器本身),而转发器中的控件必须在绑定期间或之后“找到”。 转发器中的代码是许多项目的模板,并不是特定于任何项目的模板。

我建议将一个ItemDataBound事件添加到转发器中,并在每个项目绑定到转发器时执行此事件中的逻辑。

  

 protected void rptCommentList_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { // get the data item MyObject myObject = (MyObject)e.Item.DataItem; // find the label Label lblComUserName = (Label)e.Item.FindControl("lblComUserName"); // do the magic! if (myObject.comAnonymous) lblComUserName.Visible = false; } } 

显然,首先用您绑定到转发器的collection / list / table的对象类型替换MyObject

希望有所帮助。

如果控件在转发器内

  Label lbl=(Label)Repeater1.FindControl("lbl1"); 

应该做的工作。 否则,您可以直接访问控件。 如果不是页面有错误而没有编译