Как исправить navbar с начальной загрузкой 3 для использования с начальной загрузкой 4 с выпадающим меню и картой сайта - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь использовать элемент управления меню с начальной загрузкой 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 + "&nbsp;";
        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

...