Изюминка активного просмотра в MVC2? - PullRequest
0 голосов
/ 12 июня 2011

Хорошо, мой сайт www.kristianbak.com .

У меня есть класс CSS под названием activebutton. Я хочу, чтобы это изменилось, когда активен другой вид. В настоящее время он просто жестко запрограммирован в HTML (sitemaster).

Кто-нибудь с хорошей идеей?

Ответы [ 2 ]

5 голосов
/ 12 июня 2011

Вы можете проверить текущее действие и, если оно соответствует, применить класс CSS:

<% if (ViewContext.RouteData.GetRequiredString("action") == "About") { %>
    ... highlight here
<% } %>

Еще лучше, я бы написал помощник HTML для создания меню:

public static MvcHtmlString MenuItem(
    this HtmlHelper htmlHelper, 
    string text,
    string action, 
    string controller
)
{
    var li = new TagBuilder("li");
    var routeData = htmlHelper.ViewContext.RouteData;
    var currentAction = routeData.GetRequiredString("action");
    var currentController = routeData.GetRequiredString("controller");
    if (string.Equals(currentAction, action, StringComparison.OrdinalIgnoreCase) &&
        string.Equals(currentController, controller, StringComparison.OrdinalIgnoreCase))
    {
        li.AddCssClass("active");
    }
    li.InnerHtml = htmlHelper.ActionLink(text, action, controller).ToHtmlString();
    return MvcHtmlString.Create(li.ToString());
}

, а затем используйте его так:

<ul>
    <%= Html.MenuItem("Home", "Home", "Home") %>
    <%= Html.MenuItem("About Me", "About", "Home") %>
    <%= Html.MenuItem("My Work", "Work", "Home") %>
    <%= Html.MenuItem("Blog", "Index", "Blog") %>
    ...
</ul>

Это добавит класс active к привязке, если текущий запрос соответствует действию и контроллеру ссылки.

0 голосов
/ 03 августа 2011

Метод, который я разработал благодаря этому посту:

http://geekswithblogs.net/bdiaz/archive/2010/04/09/handy-asp.net-mvc-2-extension-methods-ndash-where-am-i.aspx

очень похож.Однако у ответа есть одна большая проблема.Допустим, у нас есть 3 ссылки: Дом , О и Контакт .

У нас есть 4 контроллера с индексными действиями по умолчанию. HomeController , AboutController , ContactController и BiographyController .

Теперь на странице О Контент, на который у нас есть ссылка на страницу Биография , которая вызывает Индекс Действие в Биография Контроллер.

Однако, нажав на ссылку биографии, я бысохранить выбранную страницу «О программе», так как она является частью раздела «О программе».

Большинство решений, которые я нашел в Интернете, не охватывают этот важный бит.

Разработанное мной решение не требует использования сессий или некоторого вонючего кода в Views.Все, что нам нужно, это:

 <%= Html.ActionMenuItem("Home", "Index", "Home") %>
 <%= Html.ActionMenuItem("About", "Index", "About") %>
 <%= Html.ActionMenuItem("Contact", "Index", "Contact") %>  

Поскольку решение этой проблемы довольно длинное, я разместил его в своем блоге:

http://arturito.net/2011/08/03/asp-net-mvc-2-highlight-selected-menu-item-on-the-site-master-without-session/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...