2013-10-28 35 views
1

我想將兩個變量設置爲兩個相應的控件,並且我當前的代碼不工作。什麼是正確的語法?查找HtmlGenericControl

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

+0

我不記得是肯定的,但是當你加入'RUNAT =「服務器」'這兩個控件,他們應該可以訪問從代碼隱藏自動,不是嗎? – melancia

+1

另外,我認爲'.FindControl()'不是遞歸的。但是,再一次,我不記得了。 – melancia

+0

@MelanciaUK:他們不是。我不知道它是否重要,但找到控件的代碼位於我剛剛確認的Page_Load函數 – dmr

回答

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; 
} 
相關問題