MVC5 mit MvcSiteMapProvider zu bauen twitter bootstrap-Menü
Standard-Menü-Abschnitt in MVC5 Vorlage, wie das suchen:
<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, wie das suchen:
@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>
}
So kann ich ersetzen Sie den code
<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>
mit nur einer Zeile:
@Html.MvcSiteMap().Menu(false)
Dieser Linie produzieren diese:
<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>
Die Frage ist also wie kann ich machen @Html.Partial("_LoginPartial")
im inneren Menü erstellt, indem MvcSiteMapProvider
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Rowan ' s Antwort ist ziemlich nah an, was Sie tun müssen, und haben sollte, führte Sie auf den richtigen Pfad. Die Vorlage MyMenu.cshtml enthalten kann, einer Logik, die Sie benötigen, um die Ausgabe der gewünschten HTML-Code. Sie müssen einfach ändern Sie die Vorlage, um Ihre Anforderung zu erfüllen. Beachten Sie, dass Sie können auch ändern Sie die Standard-Vorlagen, die, wenn gewünscht, aber Sie müssen vorsichtig sein, wählen Sie "Nein", wenn gefragt, zu ersetzen, die Sie bei einer Aktualisierung von MvcSiteMapProvider, oder Ihre Anpassungen überschrieben werden.
Und dann diese Zeile erzeugt die gewünschte Ausgabe:
Wenn ich mich Recht erinnere, können Sie die DisplayTemplate in der
Menu()
Methode.Navigieren Sie zu ~/Views/Shared/DisplayTemplates und erstellen Sie eine neue Ansicht namens MyMenu.cshtml.
Legen Sie den Modell-Typ zu
MvcSiteMapProvider.Web.Html.Models.MenuHelperModel
und geben Sie dann die Menü-Struktur (mit HTML).MyMenu.cshtml
Ändern Sie jetzt Ihre
Menu()
Methode._LoginPartial
. Gibt es eine chance, zu replizieren, die Logik von_LoginPartial
@Html.MvcSiteMap().Menu("MyMenu")
aus dem inneren derelse
block?