J'essaye de rendre les balises imbriquées ul
& li
dans le code derrière. Pour cela, j'ai écrit un code préliminaire dans ma page .aspx
<ul class="dropdown" runat="server" id="tabs"> </ul>
Mon code C #
DatTable dtOutput = Generix.getData("Get Some Data");
foreach (DataRow drOutput in dtOutput.Rows)
{
HtmlGenericControl li = new HtmlGenericControl("li");
tabs.Controls.Add(li);
HtmlGenericControl anchor = new HtmlGenericControl("a");
anchor.Attributes.Add("href", "#");
anchor.InnerText = Convert.ToString(drOutput["ModuleGroup"]);
li.Controls.Add(anchor);
HtmlGenericControl ul = new HtmlGenericControl("ul");
DatTable dtOutputList = Generix.getData("Get another set of Data");
foreach (DataRow drOutputList in dtOutputList.Rows)
{
HtmlGenericControl ili = new HtmlGenericControl("li");
ul.Controls.Add(ili);
HtmlGenericControl ianchor = new HtmlGenericControl("a");
foreach (DataColumn dcOutputList in dtOutputList.Columns)
{
ianchor.Attributes.Add("href", Convert.ToString(drOutputList["ModuleFileName"]));
}
ianchor.InnerText = Convert.ToString(drOutputList["ModuleName"]);
ili.Controls.Add(ianchor);
}
//tabs.Controls.Add(li);
}
Quand je lance mon projet et inspecte un élément de mon menu, je vois
<ul id="ctl00_tabs" class="dropdown">
<li class="">
<a href="#">Master</a>
</li>
<li class="">
<a href="#">Cards Management</a>
</li>
<li class="">
<a href="#">Authorization</a>
</li>
<li class="">
<a href="#">Loyalty</a>
</li>
<li class="">
<a href="#">Reports</a>
</li>
</ul>
Aucune balise ul
imbriquée n'est créée dans li
?? Pourquoi ??
Par exemple :-
<ul id="ctl00_tabs" class="dropdown">
<li class="">
<a href="#">Master</a>
<ul>
<li><a href="Some.aspx"><span>Some Name</span></a></li>
<li><a href="Some1.aspx"><span>Some Name 1</span></a></li>
</ul>
</li>
</ul>
Vous voyez où vous appelez li.Controls.Add(anchor)
? Vous n'appelez li.Controls.Add(ul)
nulle part, vos ul
s créées ne sont donc ajoutées nulle part sur la page.
Vous pouvez ajouter des éléments LI à un élément UL à l’aide du code c # en procédant comme suit:
<ul class="respond" id="feedbackTab" runat="server"></ul>
HtmlGenericControl li = new HtmlGenericControl("li");
feedbackTab.Controls.Add(li);
HtmlGenericControl anchor = new HtmlGenericControl("a");
anchor.Attributes.Add("href", "aboutme.aspx");
anchor.InnerText = "Tab Text";
Pour plus d'informations, vous pouvez visiter ce lien: http://www.sharepointsol.com/2014/09/dynamically-adding-li-to-ul.html
Le problème ici est que vous ajoutez plusieurs attributs Href à votre ancre. Peut-être remplacer le href à chaque fois. Changez votre code pour ceci:
foreach (DataRow drOutput in dtOutput.Rows)
{
HtmlGenericControl li = new HtmlGenericControl("li");
tabs.Controls.Add(li); // tabs is id of ul tag which is runat=server
foreach (DataColumn dcOutput in dtOutput.Columns)
{
HtmlGenericControl anchor = new HtmlGenericControl("a");
anchor.Attributes.Add("href", Convert.ToString(drOutput["ModuleFileName"]));
anchor.InnerText = Convert.ToString(drOutput["ModuleName"]);
li.Controls.Add(anchor);
}
}
Vous pouvez essayer ce code:
aspx:
<form id="form1" runat="server">
<div>
<asp:PlaceHolder ID="ControlContainer"
runat="server" />
</div>
</form>
cs:
HtmlGenericControl tabs = new HtmlGenericControl("ul");
tabs.ID = "myTopnav";
tabs.Attributes.Add("class", "topnav");
HtmlGenericControl li = new HtmlGenericControl("li");
HtmlGenericControl ianchor = new HtmlGenericControl("a");
li = new HtmlGenericControl("li");
ianchor = new HtmlGenericControl("a");
ianchor.ID = "Home";
ianchor.Attributes.Add("href", "#home");
ianchor.Attributes.Add("class", "active");
ianchor.InnerText = "Home";
li.Controls.Add(ianchor);
tabs.Controls.Add(li);
li = new HtmlGenericControl("li");
ianchor = new HtmlGenericControl("a");
ianchor.ID = "News";
ianchor.Attributes.Add("href", "#");
ianchor.InnerText = "News";
li.Controls.Add(ianchor);
tabs.Controls.Add(li);
ControlContainer.Controls.Add(tabs);