Я пытаюсь использовать элемент управления меню с начальной загрузкой 4 и Sitemap для администратора и пользователя.У меня есть код меню DLL, но он использует начальную загрузку 3. Я не могу добавить выпадающее меню в панели навигации.Как мне это сделать?Я пытался изменить HTML-тег, но это не сработало. Как преобразовать этот код, чтобы он мог работать с начальной загрузкой 4, и выпадающий список может генерировать
[ControlValueProperty("SelectedValue")]
[DefaultEvent("MenuItemClick")]
[SupportsEventValidation]
[ToolboxData("<{0}:BootstrapMenu runat=\"server\"></{0}:BootstrapMenu>")]
public sealed class BootstrapMenu : Menu
{
private const string hightlightActiveKey = "HighlightActive";
/// <summary>
/// Gets or sets the header text over the left list box.
/// </summary>
[Browsable(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
[DefaultValue(false)]
[DisplayName("HighlightActive")]
public bool HighlightActive
{
get { return this.ViewState[hightlightActiveKey] != null && Convert.ToBoolean(this.ViewState[hightlightActiveKey]); }
set { this.ViewState[hightlightActiveKey] = value; }
}
public override void RenderBeginTag(HtmlTextWriter writer)
{
// don't call base.RenderBeginTag()
}
public override void RenderEndTag(HtmlTextWriter writer)
{
// don't call base.RenderEndTag()
}
protected override void OnPreRender(EventArgs e)
{
// don't call base.OnPreRender(e);
this.EnsureDataBound();
}
protected override void Render(HtmlTextWriter writer)
{
this.BuildItems(writer, this.Items, true);
}
protected override void EnsureDataBound()
{
base.EnsureDataBound();
}
private void BuildItems(HtmlTextWriter writer, MenuItemCollection items, bool isRoot = false)
{
if (items.Count <= 0)
{
return;
}
string cssClass = "dropdown-menu";
if (isRoot)
{
cssClass = "nav navbar-nav";
if (!string.IsNullOrEmpty(this.CssClass))
{
cssClass += " " + this.CssClass;
}
}
writer.AddAttribute(HtmlTextWriterAttribute.Class, cssClass);
writer.RenderBeginTag(HtmlTextWriterTag.Ul);
foreach (MenuItem item in items)
{
this.BuildItem(writer, item);
}
writer.RenderEndTag(); // </ul>
}
private void BuildItem(HtmlTextWriter writer, MenuItem item)
{
if (item == null)
{
throw new ArgumentNullException("item");
}
if (writer == null)
{
throw new ArgumentNullException("writer");
}
if (item.ChildItems.Count > 0)
{
writer.AddAttribute(HtmlTextWriterAttribute.Class, "dropdown");
}
if (this.IsLink(item))
{
if (this.HighlightActive && this.Page.ResolveUrl(item.NavigateUrl) == this.Page.Request.Url.AbsolutePath)
{
writer.AddAttribute("class", "active");
}
writer.RenderBeginTag(HtmlTextWriterTag.Li);
this.RenderLink(writer, item);
}
else if (this.HasChildren(item))
{
writer.RenderBeginTag(HtmlTextWriterTag.Li);
this.RenderDropDown(writer, item);
}
else
{
writer.RenderBeginTag(HtmlTextWriterTag.Li);
writer.RenderBeginTag(HtmlTextWriterTag.A);
writer.Write(item.Text);
writer.RenderEndTag();
}
writer.RenderEndTag(); // </li>
}
private bool HasChildren(MenuItem item)
{
if (item == null)
{
throw new ArgumentNullException("item");
}
return item.ChildItems.Count > 0;
}
private bool IsLink(MenuItem item)
{
if (item == null)
{
throw new ArgumentNullException("item");
}
return item.Enabled && !string.IsNullOrEmpty(item.NavigateUrl);
}
private void RenderLink(HtmlTextWriter writer, MenuItem item)
{
if (item == null)
{
throw new ArgumentNullException("item");
}
if (writer == null)
{
throw new ArgumentNullException("writer");
}
string href = !string.IsNullOrEmpty(item.NavigateUrl)
? this.Page.Server.HtmlEncode(this.ResolveClientUrl(item.NavigateUrl))
: this.Page.ClientScript.GetPostBackClientHyperlink(
this,
"b" + item.ValuePath.Replace(this.PathSeparator.ToString(), "\\"),
true);
writer.AddAttribute(HtmlTextWriterAttribute.Href, href);
string toolTip = !string.IsNullOrEmpty(item.ToolTip)
? item.ToolTip
: item.Text;
writer.AddAttribute(HtmlTextWriterAttribute.Title, toolTip);
writer.RenderBeginTag(HtmlTextWriterTag.A);
writer.Write(item.Text);
writer.RenderEndTag(); // </a>
}
private void RenderDropDown(HtmlTextWriter writer, MenuItem item)
{
if (item == null)
{
throw new ArgumentNullException("item");
}
if (writer == null)
{
throw new ArgumentNullException("writer");
}
writer.AddAttribute(HtmlTextWriterAttribute.Href, "#");
writer.AddAttribute(HtmlTextWriterAttribute.Class, "dropdown-toggle");
writer.AddAttribute("data-toggle", "dropdown");
writer.RenderBeginTag(HtmlTextWriterTag.A);
string anchorValue = item.Text + " ";
writer.Write(anchorValue);
writer.AddAttribute(HtmlTextWriterAttribute.Class, "caret");
writer.RenderBeginTag(HtmlTextWriterTag.B);
writer.RenderEndTag(); // </b>
writer.RenderEndTag(); // </a>
this.BuildItems(writer, item.ChildItems);
}
}
Этот код предназначен для панели навигации ``
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<a class="navbar-brand" runat="server" href="~/" style="font-family:'Times New Roman'; font-size:22px; font-weight:500;">Application</a>
<div class="navbar-collapse collapse">
<jk:BootstrapMenu ID="BootstrapMenu1" runat="server" DataSourceId="SiteMapDataSource1" />
<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" ShowStartingNode="False" />
</ul>
<asp:LoginView runat="server" ViewStateMode="Disabled">
<AnonymousTemplate>
<ul class="nav navbar-nav navbar-right">
<li><a runat="server" href="~/Register">Register</a></li>
<li><a runat="server" href="~/Login">Log in</a></li>
</ul>
</AnonymousTemplate>
</asp:LoginView>
</div>
</div>
Карта сайта
<siteMapNode title="Home" description="" roles="*" >
<siteMapNode url="~/Home" title="Home" description="" roles="*"/>
<siteMapNode url="javascript:;" title="Admin" description="Admin Page" roles ="Admin">
<siteMapNode url ="~/Admin/Roles" title="Roles" description="Roles"/>
</siteMapNode>
<siteMapNode url="~/About" title="About" description="" roles="*"/>
<siteMapNode url="~/Contact" title="Contact" description="" roles="*"/></siteMapNode>
Вывод
Вывод навигационной панели
В карте сайта у меня естьсоздан childItem в меню администратора, но он не виден в выводе.На выходе отображается только Parent Menu.C # код генерирует HTML-формат меню Используя класс css начальной загрузки версии 3. Мне нужна помощь, чтобы преобразовать класс начальной загрузки 3 в версию начальной загрузки 4