Devo evidenziare il collegamento attivo nel menu. A proposito, il mio menu è nella pagina principale. Sto cercando il modo migliore per implementarlo? Qualche idea?Asp.Net Mvc evidenziando la tecnica di collegamento della pagina corrente?
risposta
Il modo migliore per gestire questo è scrivere un helper HTML. È possibile utilizzare RouteData.Values["action"]
per ottenere l'azione attualmente in esecuzione e confrontare con il nome del menu e, se corrispondono, applicare una classe CSS che la evidenzierà.
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());
}
E poi usare questo helper per rendere le voci di menu:
<%: Html.MenuItem("about", "About us") %>
<%: Html.MenuItem("contact", "Contact us") %>
...
Ciao, Darin. Dove si mettono gli helper HTML? Una nuova cartella e quindi utilizzare "importazioni" per includerlo? Come posso usare questo? Grazie. – user1477388
sì, dove metterlo? – 4pie0
Non esiste una convenzione o un luogo specifico in cui inserire gli helper HTML personalizzati. Personalmente inserisco i metodi di estensione in una cartella Helpers. –
Sono abbastanza sicuro che si può fare questo con CSS puro. Coinvolge i selettori di classe e fa i conti con il tag del corpo. Vorrei andare con il metodo di aiuto ogni giorno della settimana.
Io uso questa soluzione:
In primo luogo - aggiungere attributo data-menuPageId al menu collegamenti
<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>
Avanti - aggiunge campo nascosto per la pagina corrente Id al Layout.cshtml
<input type="hidden" id="currentPageId" value="@(ViewBag.Page ?? "home")" />
Aggiungi l'inizializzazione di ViewBag.Page alle tue pagine come Home o Prodotti
@{
ViewBag.Page = "products";
}
E ultima cosa che si dovrebbe fare riferimento a questo Javascipt da yor Layout.cshtml
$(function() {
var pageIdAttr = "data-menuPageId";
var currentPage = $("#currentPageId").attr("value");
var menu = $(".menu");
$("a[" + pageIdAttr + "]").removeClass("selected");
$("a[" + pageIdAttr + "=\"" + currentPage + "\"]", menu).addClass("selected");
});
Utilizzo sempre questa soluzione Html Parte
<ul>
@Html.ListItemAction("Home Page","Index","Home")
@Html.ListItemAction("Manage","Index","Home")
</ul>
Helper Parte
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 provare come segue:
@{
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;
}
Se volete allegare anche le informazioni sul controller si prega di dare un'occhiata a questo link
- 1. ASP.net MVC - Navigazione ed evidenziando il link "corrente"
- 2. Impaginazione collegamento corrente non evidenziando
- 3. Come ottenere l'URL della pagina corrente in asp.net utilizzando la tecnica del code behind?
- 4. Tempo di generazione della pagina - ASP.Net MVC
- 5. Come generare un collegamento pagina popup in ASP.NET MVC
- 6. Collegamento a un elemento all'interno della pagina corrente
- 7. ASP.net MVC ottiene viewengine corrente
- 8. Ritorna URL corrente in asp.net mvc
- 9. Ciclo di vita della pagina rasoio in ASP.NET MVC
- 10. Recupera il nome della vista corrente in ASP.NET MVC?
- 11. Come determinare la versione corrente di ASP.NET MVC?
- 12. url.Azione aprire il collegamento in una nuova finestra su ASP.NET MVC Pagina
- 13. ASP.NET MVC pagina di carico con AJAX
- 14. Tempo di rendering della pagina in MVC
- 15. Get directory corrente in asp.net mvc
- 16. asp.net mvc C# ottenendo l'url della pagina che viene da
- 17. asp.net mvc ottenere corrente utente connesso id
- 18. Collegamento alla pagina corrente senza stringa di query
- 19. reindirizzare alla pagina corrente in ASP.Net
- 20. cambio lingua senza modificare la pagina corrente
- 21. Creazione di un menu Pagina principale ASP.NET MVC Dinamicamente, in base al "Ruolo" dell'utente corrente
- 22. Reindirizza la pagina mvc asp.net dalla classe logica business
- 23. asp.net mvc La risposta non autorizzata è una pagina vuota?
- 24. Visualizzazioni multiple nella stessa pagina MVC ASP.NET
- 25. ASP.NET MVC Pagina principale Ambito variabile
- 26. Asp.net MVC 2 caching
- 27. Evidenziazione della pagina corrente come collegamento attivo nel menu di navigazione incluso
- 28. Come posso sapere quale pagina sono su un'applicazione ASP.NET MVC
- 29. php aggiorna la pagina corrente?
- 30. ASP.NET MVC: diversi modelli per pagina principale e vista pagina
Hw si fa a memorizzare le voci di menu? È possibile associarli a controller e azioni e evidenziare in base a questi valori. – LukLed
li sto memorizzando in una pagina master come statica. – beratuslu
Già coperto qui? Vedi: http://stackoverflow.com/questions/1471362/how-to-visually-indicate-current-page-in-asp-net-mvc – thmshd