Это - простой вопрос. Как сделал stackoverflow, делают их меню в Asp.net MVC, с выделением на том, какая страница мы идем.
Для целей этого я написал какой-то код вниз, есть некоторая часть, которая использует мой пользовательский расширение, как язык, как язык, продолжайте и использовать его, просто игнорируйте небольшую часть Отказ
Это я помещу на верхнюю часть своего частичного, которая содержит меню, чтобы получить действие и контроллер, чтобы я мог пройти это к расширению.
<% string currentAction = ViewContext.RouteData.Values["action"].ToString();
string currentController = ViewContext.RouteData.Values["controller"].ToString(); %>
Это элемент боковой панели, в основном это будет генерировать тег «Li» со ссылкой и вашим пользовательским классом, чтобы указать, используется ли ссылка в настоящее время на странице / выделении.
public static string SidebarItem(this System.Web.Mvc.HtmlHelper html, string currentAction, string currentController, string action, string controller, string languageKey, params object[] args)
{
TagBuilder tb = new TagBuilder("li");
if (string.Equals(currentAction, action, StringComparison.OrdinalIgnoreCase) && string.Equals(currentController, controller, StringComparison.OrdinalIgnoreCase))
{
tb.GenerateId("activemenu");
}
string text = html.Language(languageKey, args);
string link = html.ActionLink(text, action, controller).ToHtmlString();
tb.SetInnerText("{0}");
return String.Format(tb.ToString(), "<span>"+link+"</span>");
}
И вот фактическое использование кода выше
<%= Html.SidebarItem(currentAction, currentController, "index", "home", "index") %>
Если вы посмотрите на источник страницы, они добавили класс CSS в элемент
, чтобы изменить цвет фона. Я предполагаю, что код смотрит на какой контроллер доступа к пользователю (вопросы, пользователям и т. Д.) и добавляет класс к этому разделу
тег.
См. В этом URL
http://stackoverflow.com/questions
Это указывает на то, что, вероятно, вопросы контроллер обрабатывает эту страницу. Таким образом, он изменяет View для отображения выделенного пункта меню.
Вероятно, нет никакой особой магии MVC, которая бы сделала это возможным.
Я уверен:
if( HttpContext.Current.Request.Path == "some some menu url" )
или
if( ViewContext_Or_ControllerContext.RouteData.Values["controller"] == "some value")
где-то используется.
Можно разместить этот код примерно в трех разных местах ( View ( .aspx ), ViewModel, Custom HtmlHelper ), и все они потребуют один и тот же бит кода.