我有这样的div:
<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>
在运行时,我在HtmlGenericControl outer_li = new HtmlGenericControl("li");
中创建列表项(ul
),其中包含属性runat ="server"
)。
现在我想做的是:
循环遍历div id="columns"
以获取每个(ul
具有属性runat ="server"
)然后遍历每个(ul)以获取每个列表项以保存内容。
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;
}
}
}
}
这不起作用虽然我的页面上有li
但我根本无法获得'li'
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);
}
答案 0 :(得分:1)
我对此进行了测试并手动添加了一些<li>
。如果我在标签中设置runat="server"
,我可以让他们出现。因此,您用于生成和添加ListItems的代码不会使用runat创建它们。
修改强>
您需要考虑使用实际的ASP .NET控件(如DataGrid或Repeater或BulletedList)作为MAW74656建议而不是HTML <ul>
。
答案 1 :(得分:0)
也许您可以更改列表以使用ASP listitem控件,这将允许您...
尝试这样的事情。使用是为了测试投射控制是有效的。
foreach (Control c in Page.Controls)
{
if (c is ListItem)
{
//do something with the control
}
}