【问题标题】:Finding HtmlGenericControl查找 HtmlGenericControl
【发布时间】:2013-10-28 14:59:24
【问题描述】:

我正在尝试将两个变量分别设置为两个控件,但我当前的代码不起作用。正确的语法是什么?

ascx 代码:

<ul>
    <li runat="server" id="searchListItem">
       <a href="javascript:void(0)">Search Keywords</a>
    </li>
</ul>
<input runat="server" id="searchBox" type="text" />

ascx.vb 代码:

Private Sub Page_Load (...
    `other code

    Dim jobsLi As HtmlGenericControl
    Dim jobsBox As HtmlGenericControl
    jobsLi = CType(Page.FindControl("searchListItem"), HtmlGenericControl)
    jobsBox = CType(Page.FindControl("searchBox"), HtmlGenericControl)

    `other code
End Sub

当我单步执行代码 jobsLijobsBox 时,仍然是 nothing

【问题讨论】:

  • 我记不太清了,但是当您将 runat="server" 添加到这两个控件时,它们应该可以从 CodeBehind 自动访问,不是吗?
  • 另外,我认为.FindControl() 不是递归的。但话又说回来,我不记得了。
  • @MelanciaUK:他们不是。我不知道这是否重要,但是找到控件的代码在 Page_Load 函数中
  • 我刚刚确认了。它不是递归的。 codinghorror.com/blog/2005/06/recursive-pagefindcontrol.html
  • @MelanciaUK:谢谢!我使用了递归函数,现在它可以工作了。如果你写你的评论作为答案,我会接受。

标签: asp.net vb.net findcontrol htmlgenericcontrol


【解决方案1】:

.FindControl() 不会递归执行搜索,因此解决它的一种方法是编写自定义方法来执行此操作。

围绕这些行:

private Control FindControlRecursive(Control root, string id) 
{ 
    if (root.ID == id)
    { 
        return root; 
    } 

    foreach (Control c in root.Controls) 
    { 
        Control t = FindControlRecursive(c, id); 
        if (t != null) 
        { 
            return t; 
        } 
    } 

    return null; 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    • 2016-06-26
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    相关资源
    最近更新 更多