如何循环控件以获取特定类型的控件?

我有这样的div:


在运行时我创建了列表项HtmlGenericControl outer_li = new HtmlGenericControl("li");中的( ul ,其属性为runat ="server" )。

现在我想要做的是:循环通过div id="columns"获取每个( ul具有属性runat ="server" )然后遍历每个(ul)以获取每个列表项以保存内容。


编辑:根据答案:

 foreach (Control c in columns.Controls.OfType()) { var ctrl = (HtmlGenericControl)c; if (ctrl.TagName == "ul" && ctrl.ID != "column1") { foreach (Control li in ctrl.Controls.OfType()) { var ctrl_li = (HtmlGenericControl)li; if (ctrl_li.TagName == "li") { string id = ctrl_li.ID; } } } } 

虽然我的页面上有li ,但这根本无法获得’li’


编辑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); } 

我测试了这个,并手动添加了一些

  • 。 如果我在他们的标签中设置runat="server" ,我可以让他们出现。 因此,您用于生成和添加ListItems的代码不会使用runat创建它们。

    编辑
    您需要考虑使用实际的ASP .NET控件(如DataGrid或Repeater或BulletedList)作为MAW74656建议而不是HTML

      也许您可以更改列表以使用ASP listitem控件,这将允许您…

      尝试这样的事情。 使用是为了测试投射控制是有效的。

        foreach (Control c in Page.Controls) { if (c is ListItem) { //do something with the control } }