2012-01-06 11 views
1

在我的asp.net頁面中點擊按鈕(getDivsOrder)時,我想通過使用循環或類似的命令來獲得mainDiv中的div的id。我怎樣才能做到這一點?獲取div的id在一個循環中

   <ContentTemplate> 

       <div id="mainDiv" runat="server"> 
        <div id="Red"  runat="server"></div> 
        <div id="Yellow" runat="server"></div> 
        <div id="Green" runat="server"></div> 
        ... 
       </div> 

     <asp:Button ID="getDivsOrder" runat="server" Text="Update label " 
     onclick="btnHelloWorld_Click" /> 

     </ContentTemplate> 
+0

你能添加'btnHelloWorld_Click'功能? – Dementic 2012-01-06 09:08:25

回答

1

我寫了下面的工具方法,你可以放入「實用工具列工具」類或什麼的。你可以使用它:mainDiv.FindControlsOfType<HtmlGenericControl>()返回控件列表。

/// <summary> 
    /// Given a root Control, do a recursive search for Controls implementing or deriving from class/interface T 
    /// </summary> 
    /// <typeparam name="T"></typeparam> 
    /// <param name="ctlRoot"></param> 
    /// <returns></returns> 
    public static List<T> FindControlsOfType<T>(this Control ctlRoot) 
    { 
     List<T> controlsFound = new List<T>(); 

     if (typeof(T).IsInstanceOfType(ctlRoot)) 
      controlsFound.Add((T)(object)ctlRoot); 

     foreach (Control ctlTemp in ctlRoot.Controls) 
     { 
      controlsFound.AddRange(FindControlsOfType<T>(ctlTemp)); 
     } 

     return controlsFound; 
    } 

你有一個問題是,div不符合任何標準的ASP.NET Web控件,所以HtmlGenericControl在搜索中使用。因此,搜索將收取任何HtmlGenericControl,而不僅僅是div元素。因此,您必須查看每個控件的TagName屬性以確保它絕對是div

此外,請注意,在服務器端執行此操作將意味着您僅檢查服務器上的mainDiv控件的內容和順序。如果您要更改客戶端的div的順序,例如使用jQuery可拖動,服務器將不知道它,除非你使用額外的JavaScript來回發新訂單div

+0

非常感謝您的幫助 – user1077300 2012-01-06 09:18:40

+0

請標記問題回答如果這是現在關閉。謝謝。 – 2012-01-09 09:49:03

0

如果你只是想div編號:

foreach (Control c in mainDiv.Controls) 
    { 
     if (c is HtmlGenericControl) 
     { 
      String id = c.ID; 
     } 
    } 
+0

非常感謝您的幫助 – user1077300 2012-01-06 09:20:46

+0

有沒有辦法將c的屬性更改爲div? – user1077300 2012-01-06 12:30:18

+0

你是什麼意思?如果您修改c,您將修改相應的div。 – Brissles 2012-01-06 12:40:35