Ich muss aktiven Link im Menü markieren. Mein Menü befindet sich übrigens auf der Masterseite. Ich suche den besten Weg, dies zu implementieren? Irgendwelche Ideen?Asp.Net Mvc Hervorhebung aktuelle Seite Link-Technik?
Antwort
Der beste Weg, dies zu umgehen, ist ein HTML-Helfer zu schreiben. Sie könnten RouteData.Values["action"]
verwenden, um die aktuell ausgeführte Aktion abzurufen und mit dem Menünamen zu vergleichen. Wenn sie übereinstimmen, wenden Sie eine CSS-Klasse an, die sie hervorhebt.
public static MvcHtmlString MenuItem(
this HtmlHelper htmlHelper,
string action,
string text
)
{
var menu = new TagBuilder("div");
var currentAction = (string)htmlHelper.ViewContext.RouteData.Values["action"];
if (string.Equals(
currentAction,
action,
StringComparison.CurrentCultureIgnoreCase)
)
{
menu.AddCssClass("highlight");
}
menu.SetInnerText(text);
return MvcHtmlString.Create(menu.ToString());
}
Und dann diese Helfer verwenden, um die Menüpunkte zu machen:
<%: Html.MenuItem("about", "About us") %>
<%: Html.MenuItem("contact", "Contact us") %>
...
Hallo, Darin. Wo setzt man HTML-Helfer ein? Ein neuer Ordner und dann "importieren", um es aufzunehmen? Wie kann ich das verwenden? Vielen Dank. – user1477388
ja, wo, das zu setzen? – 4pie0
Es gibt keine Konvention oder einen bestimmten Ort, um die benutzerdefinierten HTML-Helfer zu platzieren. Persönlich lege ich die Erweiterungsmethoden in einen Helfer-Ordner. –
Ich bin mir ziemlich sicher, dass Sie dies mit reinem CSS tun können. Es beinhaltet Klassenselektoren und das Faffing mit dem Body-Tag. Ich würde jeden Tag in der Woche mit der Helfer-Methode gehen.
Ich benutze diese Lösung:
Erste - fügen Sie Attributdaten-menuPageId zu Ihrem Menü verbindet
<ul class="menu">
<li data-menuPageId="home">
@(Html.Link<HomeController>(x => x.Index(), "Home"))
</li>
<li data-menuPageId="products">
@(Html.Link<ProductsController>(x => x.Index(), "Products"))
</li>
</li>
Next - für die aktuelle Seite verstecktes Feld hinzufügen Id
<input type="hidden" id="currentPageId" value="@(ViewBag.Page ?? "home")" />
Layout.cshtml
Fügen Sie ViewBag.Page initialization auf Ihren Seiten hinzu, wie Home oder Produkte
@{
ViewBag.Page = "products";
}
Und letzte, was sollten Sie diese JavaScipt von Yor Layout.cshtml Referenz
$(function() {
var pageIdAttr = "data-menuPageId";
var currentPage = $("#currentPageId").attr("value");
var menu = $(".menu");
$("a[" + pageIdAttr + "]").removeClass("selected");
$("a[" + pageIdAttr + "=\"" + currentPage + "\"]", menu).addClass("selected");
});
ich immer diese Lösung bin mit Html Teil
<ul>
@Html.ListItemAction("Home Page","Index","Home")
@Html.ListItemAction("Manage","Index","Home")
</ul>
Helper Teil
public static class ActiveLinkHelper
{
public static MvcHtmlString ListItemAction(this HtmlHelper helper, string name, string actionName, string controllerName)
{
var currentControllerName = (string)helper.ViewContext.RouteData.Values["controller"];
var currentActionName = (string)helper.ViewContext.RouteData.Values["action"];
var sb = new StringBuilder();
sb.AppendFormat("<li{0}", (currentControllerName.Equals(controllerName, StringComparison.CurrentCultureIgnoreCase) &&
currentActionName.Equals(actionName, StringComparison.CurrentCultureIgnoreCase)
? " class=\"active\">" : ">"));
var url = new UrlHelper(HttpContext.Current.Request.RequestContext);
sb.AppendFormat("<a href=\"{0}\">{1}</a>", url.Action(actionName, controllerName), name);
sb.Append("</li>");
return new MvcHtmlString(sb.ToString());
}
}
In Layout versuchen wie folgt:
@{
string url = Request.RawUrl;
}
@switch (url)
{
case "/home/":
@Html.ActionLink("Home", "../home/", null, new { @style = "background:#00bff3;" })
@Html.ActionLink("Members", "../home/MembersList/")
break;
case "/home/MembersList/":
@Html.ActionLink("Home", "../home/")
@Html.ActionLink("Members", "../home/MembersList/", null, new { @style = "background:#00bff3;" })
break;
default:
@Html.ActionLink("Home", "../home/")
@Html.ActionLink("Members", "../home/MembersList/")
break;
}
Wenn Sie möchten auch die Informationssteuerung fügen Sie bitte einen Blick auf diesen Link
- 1. ASP.net MVC - Navigation und Hervorhebung der „aktuelle“ Link
- 2. Wie wird die aktuelle Seite in ASP.NET MVC visuell angezeigt?
- 3. ASP.NET MVC Razor Syntax Hervorhebung Failing
- 4. ASP.NET Erhalten Aktuelle Seite Objekt
- 5. Aktualisieren asp.net mvc Seite
- 6. JavaScript: Entfernen Sie die aktuelle Maus-Hervorhebung von der Seite?
- 7. Anfügen an aktuelle URL in ASP.NET MVC
- 8. ASP.NET MVC - Aktuelle Ordner der Ansicht
- 9. ASP.NET MVC - Aktuelle Aktion von Controller-Code?
- 10. Aktuelle Debugsymbole für ASP.NET MVC 2 Version
- 11. Umleiten auf aktuelle Seite in ASP.Net
- 12. Seite Generation Zeit - ASP.Net MVC
- 13. Aktuelle Seite
- 14. Asp.Net MVC Die vorherige Seite finden
- 15. asp.net Mvc Seite kippe Referenz finden
- 16. asp.net MVC Google Analytics auf jeder Seite
- 17. Mehrere Tabellen einfügen von ASP.net MVC Seite
- 18. Force http Seite auf ASP.NET MVC IIS
- 19. ASP.NET MVC in eine WebForms-Seite einfügen
- 20. 404-Seite für eine ASP.NET MVC-Anwendung
- 21. Mehrere Ansichten auf derselben Seite MVC ASP.NET
- 22. aktuelle Seite beim Aktualisieren der obersten Ebene in MVC beibehalten
- 23. asp.net mvc - müssen einige Daten für die aktuelle Anfrage speichern
- 24. Wie ermittelt man die aktuelle Version von ASP.NET MVC?
- 25. asp.net C# obout Einzelheiten Grid erhalten aktuelle Seite Index
- 26. passieren aktuelle Instanz von asp.net Web-Seite über InjectionConstructor
- 27. PHP aktuelle Seite aktualisieren?
- 28. - ASP.NET MVC
- 29. ASP.NET MVC Session Ablauf
- 30. Wie poste ich Daten von einem asp.net MVC-Controller zu einer nicht MVC asp.net-Seite?
Hw speichern Sie Menü haben? Sie können sie mit Controller und Aktion verknüpfen und basierend auf diesen Werten markieren. – LukLed
Ich speichere sie in einer Masterpage als statisch. – beratuslu
Bereits hier behandelt? Siehe: http://StackOverflow.com/Questions/1471362/How-to-visuell-indicate-current-page-in-asp-net-mvc – thmshd