在一个循环中获取div的ID

时间:2012-01-06 09:06:47

标签: asp.net asp.net-ajax

在我的asp.net页面中,当单击按钮(getDivsOrder)时,我想通过循环或类似的方式获取mainDiv中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>

2 个答案:

答案 0 :(得分:1)

我编写了以下实用程序方法,您可以将其放入“Utility Toolbelt”类或其他任何内容中。您可以像使用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 draggable,服务器将无法知道它,除非您使用其他javascript来回发新的div订单。

答案 1 :(得分:0)

如果您只想要div ids:

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