如何通过循环控制,以获得specifc类型的控制? [英] How to loop through controls to get specifc type of controls?

查看:116
本文介绍了如何通过循环控制,以获得specifc类型的控制?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这样一个div:

 < D​​IV ID =栏=服务器>
       < UL ID =列1级=列>
        &所述;! - /////////////// - >
        < / UL>
        < UL ID =列2级=栏=服务器>
        < / UL>
        < UL ID =栏3级=栏=服务器>
        < / UL>
        < UL ID =column4级=栏=服务器>
            < ASP:占位符ID =PLACEHOLDER1=服务器>< / ASP:占位符>
        < / UL>
    < / DIV>


在运行时创建的 listItems中( HtmlGenericControl outer_li =新HtmlGenericControl(礼); 的( UL 有属性 =服务器)。

现在什么我想要做的是:
通过 DIV ID循环=栏来获取每个( UL 有属性 RUNAT = 服务器),然后在每个(UL环),以获得每个列表项保存的内容。


修改:根据answes:

 的foreach(在columns.Controls.OfType&LT控制℃; HtmlGenericControl>())
        {
            VAR CTRL =(HtmlGenericControl)C;            如果(ctrl.TagName ==UL&放大器;&安培;!ctrl.ID =列1)
            {
                的foreach(在ctrl.Controls.OfType&LT控制立; HtmlGenericControl>())
                {                    VAR ctrl_li =(HtmlGenericControl)里;
                    如果(ctrl_li.TagName ==李)
                    {
                        字符串ID = ctrl_li.ID;
                    }
                }
            }
        }

这不工作我根本无法虽然有获得礼我的网页上


修改2:

 保护无效CreateBlockOfData(字符串widget_color,诠释column_par,串PROCESS_NAME,诠释BLOCK_TYPE,诠释BLOCK_ID)
        {
            HtmlGenericControl outer_li =新HtmlGenericControl(礼);
            outer_li.Attributes.Add(类,wid​​get_color);
            如果(column_par == 1)
            {
                column1.Controls.Add(outer_li);
            }
            否则如果(column_par == 2)
            {
                //uppnl_2.ContentTemplateContainer.Controls.Add(outer_li);
                column2.Controls.Add(outer_li);
            }
            否则,如果(column_par == 3)
            {
                column3.Controls.Add(outer_li);
            }
            否则,如果(column_par == 4)
            {
                column4.Controls.Add(outer_li);
            }
            ////////////////////////////////////////////////// //////////
            HtmlGenericControl div_head =新HtmlGenericControl(分区);
            div_head.Attributes.Add(类,小工具头);
            outer_li.Controls.Add(div_head);
            ////////////////////////////////////////////////// //////////
            HtmlGenericControl H3 =新HtmlGenericControl(H3);
            div_head.Controls.Add(H3);
            ////////////////////////////////////////////////// /////////
            标签lbl_process_name =新的Label();
            lbl_process_name.Text = process_name.TrimEnd();
            h3.Controls.Add(lbl_process_name);
            ////////////////////////////////////////////////// /////////
            HtmlGenericControl div_content =新HtmlGenericControl(分区);
            div_content.Attributes.Add(类,小窗口内容);
            outer_li.Controls.Add(div_content);
            ////////////////////////数据///////////////////////// /////
            控制crl_data = FormTheData(BLOCK_TYPE,BLOCK_ID);
            PlaceHolder1.Controls.Add(crl_data);
            crl_data.DataBind();
            div_content.Controls.Add(crl_data);
        }


解决方案

我测试了这一点,并加入了一些<立GT;的手动。我可以让他们展现出来,如果​​我设置 =服务器在他们的标签。让你在使用生成并添加ListItems的的code未带有runat创建它们。

修改结果
你让需要考虑使用实际的ASP .NET控件如DataGrid或Repeater或BulletedList中作为MAW74656建议,而不是HTML < UL>的

I have a div like this :

<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 run time I create listitems(HtmlGenericControl outer_li = new HtmlGenericControl("li");) in the (ul which has attribute runat ="server").

Now what i wanna to do is : looping through div id="columns" to get each (ul which has attribute runat ="server") then loop through each (ul) to get each list item to save contents .


EDIT :according to answes :

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;
                    }
                }
            }
        }

this doesn't work i can't get the 'li' at all although there are li on my page


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

解决方案

I tested this and added some <li>'s manually. I could get them to show up if I set runat="server" in their tag. So the code you're using to generate and add the ListItems is not creating them with the runat.

Edit
You made need to consider using an actual ASP .NET Control such as a DataGrid or Repeater or BulletedList as MAW74656 suggested instead of HTML <ul>'s.

这篇关于如何通过循环控制,以获得specifc类型的控制?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆