我有一个登录视图控件,可以在findcontrol中找到。里面是LoggedInTemplate->ul->li->ul->li->a。我怎么能找到一个?下面是示例代码:
<asp:LoginView runat="server" ViewStateMode="Disabled" ID="a"> <LoggedInTemplate> <ul class="nav navbar-centered navbar-nav" id="second-menu" role="menu" > <li class="dropdown"><a runat="server" href="" class="dropdown-toggle" >AB</span></a> <ul class="dropdown-menu"> <li><a runat="server" id="link">Link</a></li>
这样做是可行的:
LoginView a = (LoginView)this.Master.FindControl("a");但这并不是:
HyperLink dashboardLink = (HyperLink)a.FindControl("link");发布于 2014-03-31 22:19:38
来自FindControl的MSDN页面:
只有当指定的容器直接包含控件时,此方法才会找到控件;也就是说,该方法不会在控件中的控件层次结构中搜索。有关在不知道控件直接容器时如何查找控件的信息,请参阅如何:按ID访问服务器控件。
因此,您必须编写自己的递归查找方法:
private Control FindControlRecursive(Control rootControl, string controlID)
{
if (rootControl.ID == controlID) return rootControl;
foreach (Control controlToSearch in rootControl.Controls)
{
Control controlToReturn =
FindControlRecursive(controlToSearch, controlID);
if (controlToReturn != null) return controlToReturn;
}
return null;
}你可以这样用:
LoginView a = (LoginView)this.Master.FindControl("a");
HyperLink dashboardLink = (HyperLink)FindControlRecursive(a,"link");或者简单地说:
HyperLink dashboardLink = (HyperLink)FindControlRecursive(this.Master,"link");但是要想让它起作用,你必须使用
<a runat="server" ID="link">Link</a>据我所知,"ID“是区分大小写的。
编辑:根据此MSDN页面,您可以使用它的名称(ID)访问该控件。
当控件不在命名容器中时,可以使用控件的ID获得对它的引用。
本文也有示例代码。
https://stackoverflow.com/questions/22773274
复制相似问题