2011-03-10 58 views
3
System.Web.UI.HtmlControls.HtmlGenericControl div = (System.Web.UI.HtmlControls.HtmlGenericControl)pnl.Controls[0].FindControl("divMessage"); 

我試圖找到divMessage somethign就像上面,但我得到空...:下面找到一個HtmlGenericControl

是我的div怎麼所在。

<mobile:Panel ID="pnl" Runat="server"> 
    <mobile:DeviceSpecific ID="device" runat="server"> 
      <ContentTemplate> 
      <div id="divMessage" runat="server">test.....</div> 
     </ContentTemplate> 
      </mobile:DeviceSpecific> 
</mobile:Panel> 
+0

你能否添加一些更詳細的標記? – Alex 2011-03-10 17:14:36

+0

我已更新我的問題... – 2011-03-10 18:03:17

+0

jquery選擇器是遞歸的。 – 2011-03-10 18:36:18

回答

5

這應該找到div你需要:

var div = (HtmlGenericControl)pnl.Controls[0].FindControl("divMessage"); 

我創建了一個新的頁面,並通過它進行測試:

<%@ Page Language="C#" Inherits="System.Web.UI.MobileControls.MobilePage" %> 
<%@ Register TagPrefix="mobile" 
    Namespace="System.Web.UI.MobileControls" 
    Assembly="System.Web.Mobile" %> 

<script runat="server"> 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     var div = (HtmlGenericControl)pnl.Controls[0].FindControl("divMessage"); 
    } 

</script> 
<body> 
    <mobile:form id="form1" runat="server"> 

    <mobile:panel id="pnl" runat="server"> 
     <mobile:DeviceSpecific ID="device" runat="server"> 
      <Choice> 
       <ContentTemplate> 
        <div id="divMessage" runat="server">test.....</div> 
       </ContentTemplate> 
      </Choice> 
     </mobile:DeviceSpecific> 
    </mobile:panel> 

    </mobile:form> 
</body> 
</html> 

變量div包含您需要的控件。

0

我相信問題是因爲pnl控件不包含divMessage。您必須迭代到包含的控件才能找到它。

3

查找控件的最簡單方法是執行遞歸搜索,因爲當前方法可能因控件嵌套方式而失敗。

/// <summary> 
/// Recursive FindControl method, to search a control and all child 
/// controls for a control with the specified ID. 
/// </summary> 
/// <returns>Control if found or null</returns> 
public static Control FindControlRecursive(Control root, string id) 
{ 
    if (id == string.Empty) 
     return null; 

    if (root.ID == id) 
     return root; 

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

然後,您可以通過以下方式使用此方法:

HtmlGenericControl div = (HtmlGenericControl) FindControlRecursive(pnl, "divMessage"); 
+0

我更新了我的問題,我想知道我能在客戶端做什麼? – 2011-03-10 18:34:10

+0

1+感謝這個foreach – 2011-03-10 23:27:22