首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在LoginView内部找到控制

在LoginView内部找到控制
EN

Stack Overflow用户
提问于 2014-03-31 22:16:24
回答 1查看 1.4K关注 0票数 0

我有一个登录视图控件,可以在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>

这样做是可行的:

代码语言:javascript
复制
LoginView a = (LoginView)this.Master.FindControl("a");

但这并不是:

代码语言:javascript
复制
HyperLink dashboardLink = (HyperLink)a.FindControl("link");
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-31 22:19:38

来自FindControl的MSDN页面

只有当指定的容器直接包含控件时,此方法才会找到控件;也就是说,该方法不会在控件中的控件层次结构中搜索。有关在不知道控件直接容器时如何查找控件的信息,请参阅如何:按ID访问服务器控件。

因此,您必须编写自己的递归查找方法:

代码语言:javascript
复制
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;
}

你可以这样用:

代码语言:javascript
复制
LoginView a = (LoginView)this.Master.FindControl("a");
HyperLink dashboardLink = (HyperLink)FindControlRecursive(a,"link");

或者简单地说:

代码语言:javascript
复制
HyperLink dashboardLink = (HyperLink)FindControlRecursive(this.Master,"link");

但是要想让它起作用,你必须使用

代码语言:javascript
复制
<a runat="server" ID="link">Link</a>

据我所知,"ID“是区分大小写的。

编辑:根据此MSDN页面,您可以使用它的名称(ID)访问该控件。

当控件不在命名容器中时,可以使用控件的ID获得对它的引用。

本文也有示例代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22773274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档