MVC5使用MvcSiteMapProvider构建twitter bootstrap菜单

MVC5模板中的默认菜单部分如下所示:

 

_LoginPartial看起来像这样:

 @using Microsoft.AspNet.Identity @if (Request.IsAuthenticated) { using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" })) { @Html.AntiForgeryToken()  } } else {  } 

所以我可以替换代码

   

只有一行:

 @Html.MvcSiteMap().Menu(false) 

该行将产生这样的:

   

所以问题是如何在MvcSiteMapProvider创建的菜单中呈现@Html.Partial("_LoginPartial")

Rowan的答案非常接近你需要做的事情,应该让你走上正确的道路。 模板MyMenu.cshtml可以包含输出所需HTML所需的任何逻辑。 您只需修改模板即可满足您的要求。 请注意,您也可以根据需要修改默认模板,但在升级MvcSiteMapProvider时要求更换它们时必须小心选择“否”,否则您的自定义将被覆盖。

 @model MvcSiteMapProvider.Web.Html.Models.MenuHelperModel @using MvcSiteMapProvider.Web.Html.Models  

然后这一行将产生所需的输出:

 @Html.MvcSiteMap().Menu("MyMenu") 

如果我没记错,你可以在Menu()方法中指定DisplayTemplate。

导航到〜/ Views / Shared / DisplayTemplates并创建一个名为MyMenu.cshtml的新视图。

将模型类型设置为MvcSiteMapProvider.Web.Html.Models.MenuHelperModel ,然后指定菜单结构(使用HTML)。

MyMenu.cshtml

 @model MvcSiteMapProvider.Web.Html.Models.MenuHelperModel @using MvcSiteMapProvider.Web.Html.Models  

现在更改Menu()方法。

 @Html.MvcSiteMap().Menu("MyMenu")