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 ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Getestet habe ich diese und einige zusätzliche
<li>
's manuell. Ich könnte Ihnen zeigen, wenn ichrunat="server"
in Ihren tag. Also, der code, die Sie verwenden, um zu generieren und Sie die ListItems nicht erstellen Sie mit dem runat.Bearbeiten
Sie machten müssen, erwägen Sie die Verwendung einer eigentlichen ASP .NET-Steuerelement wie ein DataGrid oder Repeater oder BulletedList als MAW74656 vorgeschlagen, anstelle von HTML -
<ul>
's.outer_li.Attributes.Add("runat","server");
aber invain..obwohl es scheint, in den Quelltext anzeigen und mitrunat="server"
Vielleicht könnten Sie ändern Ihre Liste der ASP-listitem-Steuerelement, das es ermöglichen würde, Sie zu...
Probieren Sie etwas wie dieses. Mit ist aus ein Steuerelement für die Prüfung effizient ist.
asp:listitem
s