Wie eine Schleife durch die controls, um die spezifische Art von Kontrollen?

Ich habe ein div-Element wie diesem:

<div id="columns" runat="server">
       <ul id="column1" class="column" >
        <!-- ///////////////-->
        </ul>
        <ul id="column2" class="column" runat="server">
        </ul>
        <ul id="column3" class="column" runat="server">
        </ul>
        <ul id="column4" class="column" runat="server">
            <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
        </ul>
    </div>

In der Laufzeit, die ich erstellen listitems(HtmlGenericControl outer_li = new HtmlGenericControl("li");) in der (ul welches Attribut runat ="server").

Nun, was ich will zu tun ist:
Durchlaufen div id="columns" zu bekommen jede (ul welches Attribut runat ="server"), dann Durchlaufen Sie jedes (ul) zu bekommen jede Liste Element, um Inhalte speichern .


EDIT: laut Antworten:

foreach (Control c in columns.Controls.OfType<HtmlGenericControl>())
        {
            var ctrl = (HtmlGenericControl)c;

            if (ctrl.TagName == "ul" && ctrl.ID != "column1")
            {
                foreach (Control li in ctrl.Controls.OfType<HtmlGenericControl>())
                {

                    var ctrl_li = (HtmlGenericControl)li;
                    if (ctrl_li.TagName == "li")
                    {
                        string id = ctrl_li.ID;
                    }
                }
            }
        }

dies nicht funktionieren, komme ich nicht an die 'li', aber es gibt li auf meiner Seite


Edit 2:

 protected void CreateBlockOfData(string widget_color, int column_par, string process_name, int block_type, int block_id)
        {
            HtmlGenericControl outer_li = new HtmlGenericControl("li");
            outer_li.Attributes.Add("class", widget_color);
            if (column_par == 1)
            {
                column1.Controls.Add(outer_li);
            }
            else if (column_par == 2)
            {
                //uppnl_2.ContentTemplateContainer.Controls.Add(outer_li);
                column2.Controls.Add(outer_li);
            }
            else if (column_par == 3)
            {
                column3.Controls.Add(outer_li);
            }
            else if (column_par == 4)
            {
                column4.Controls.Add(outer_li);
            }
            ////////////////////////////////////////////////////////////
            HtmlGenericControl div_head = new HtmlGenericControl("div");
            div_head.Attributes.Add("class", "widget-head");
            outer_li.Controls.Add(div_head);
            ////////////////////////////////////////////////////////////
            HtmlGenericControl h3 = new HtmlGenericControl("h3");
            div_head.Controls.Add(h3);
            ///////////////////////////////////////////////////////////
            Label lbl_process_name = new Label();
            lbl_process_name.Text = process_name.TrimEnd();
            h3.Controls.Add(lbl_process_name);
            ///////////////////////////////////////////////////////////
            HtmlGenericControl div_content = new HtmlGenericControl("div");
            div_content.Attributes.Add("class", "widget-content");
            outer_li.Controls.Add(div_content);
            ////////////////////////Data//////////////////////////////
            Control crl_data = FormTheData(block_type, block_id);
            PlaceHolder1.Controls.Add(crl_data);
            crl_data.DataBind();
            div_content.Controls.Add(crl_data);
        }
  • -Warum nicht BulletedList Klasse hier?
  • Wenn Sie das hinzufügen dieser <li>'s als html-text den Platzhalter, dann sind Sie nicht 'Kontrollen' so weit ASP.Net ist besorgt. Sie können nicht fügen Sie eine "runat=server" als normales Attribut, um es der Kontrolle, die Sie brauchen würde, um es hinzuzufügen, wie HtmGenericControl oder so ähnlich.
  • Können Sie überprüfen meinen letzten edit bitte ?
Schreibe einen Kommentar