Лучший способ добавить класс CSS к элементу в файле макета бритвы? - PullRequest
3 голосов
/ 01 февраля 2012

У меня есть веб-страница с меню навигации.Текущая страница должна быть выделена, что делается путем добавления класса CSS.Но это меню определено на странице макета, так как я могу добавить класс к текущему элементу меню?

Единственное решение, которое я могу придумать, - это использовать уникальное свойство ViewBag для каждого элемента меню и использоватьчто добавить класс из соответствующего метода Action.Пример:

<div class="link @ViewBag.DashboardActive">
    @Html.ActionLink("Dashboard", "Index")
</div>
<div class="link @ViewBag.Item2Active">
    @Html.ActionLink("Item2", "Item2")
</div>

и т. Д.

Это делает работу, но у меня есть ощущение, что есть более элегантный способ решить эту проблему.

Ответы [ 2 ]

3 голосов
/ 01 февраля 2012

Вы можете написать собственный помощник, который будет генерировать эти меню и применять класс CSS к выбранному в данный момент элементу.Вы лежите, посмотрите на следующий пример .А вот аналог , который использует якорь.

1 голос
/ 01 февраля 2012

Если вы не хотите устанавливать свойства ViewBag в каждом используемом вами действии, используйте метод @Html.RenderAction.

это ваш взгляд:

@{ Html.RenderAction("Menu", "MyController", new {selectedItem = "dashboard"}); }

это ваше действие в меню:

[HttpGet, ChildActionOnly]
public PartialViewResult Menu(string selectedItem)
{
    ViewBag.SelectedItem = selectedItem;
    return PartialView("Menu");
}

В моих проектах для установки выбранного пункта меню я использую атрибут фильтра настраиваемого действия, который я применяю к контроллеру / действию.

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