MVC5模板中的默认菜单部分如下所示:
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
<li>@Html.ActionLink("Contact", "Contact", "Home")</li>
</ul>
@Html.Partial("_LoginPartial")
</div>
_LoginPartial如下所示:
@using Microsoft.AspNet.Identity
@if (Request.IsAuthenticated)
{
using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" }))
{
@Html.AntiForgeryToken()
<ul class="nav navbar-nav navbar-right">
<li>
@Html.ActionLink("Hello " + User.Identity.GetUserName() + "!", "Manage", "Account", routeValues: null, htmlAttributes: new { title = "Manage" })
</li>
<li><a href="javascript:document.getElementById('logoutForm').submit()">Log off</a></li>
</ul>
}
}
else
{
<ul class="nav navbar-nav navbar-right">
<li>@Html.ActionLink("Register", "Register", "Account", routeValues: null, htmlAttributes: new { id = "registerLink" })</li>
<li>@Html.ActionLink("Log in", "Login", "Account", routeValues: null, htmlAttributes: new { id = "loginLink" })</li>
</ul>
}
所以我可以替换代码
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
<li>@Html.ActionLink("Contact", "Contact", "Home")</li>
</ul>
</div>
仅一行:
@Html.MvcSiteMap().Menu(false)
该行将产生以下内容:
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
<li>@Html.ActionLink("Contact", "Contact", "Home")</li>
</ul>
//how to put _LoginPartial here!
</div>
所以问题是如何在
@Html.Partial("_LoginPartial")
创建的菜单内渲染MvcSiteMapProvider
? 最佳答案
罗恩的答案与您需要做的非常接近,应该可以带您走正确的道路。模板MyMenu.cshtml可以包含输出所需HTML所需的任何逻辑。您只需要修改模板即可满足您的要求。请注意,您还可以根据需要修改默认模板,但是在升级MvcSiteMapProvider时要求替换默认模板时,必须小心选择“否”,否则您的自定义设置将被覆盖。
@model MvcSiteMapProvider.Web.Html.Models.MenuHelperModel
@using MvcSiteMapProvider.Web.Html.Models
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
@foreach (var node in Model.Nodes) {
<li>@Html.DisplayFor(m => node)</li>
}
</ul>
@Html.Partial("_LoginPartial")
</div>
然后此行将产生所需的输出:
@Html.MvcSiteMap().Menu("MyMenu")
关于c# - MVC5使用MvcSiteMapProvider来构建Twitter引导菜单,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19759606/