如何通过循环控制,以获得specifc类型的控制? [英] How to loop through controls to get specifc type of controls?
问题描述
我有这样一个div:
< DIV 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(类,widget_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屋!