ASP.NET MVC - элемент списка стилей на основе контроллера - PullRequest
8 голосов
/ 05 августа 2009

Моя конечная цель - создать меню, которое добавляет класс к элементу списка, который связан с текущей страницей, на которой я нахожусь.

Итак, я настроил его так, что каждый контроллер будет связан с элементом в моем меню. Мне нужно добавить класс к этому элементу списка (изменение цвета, фона, что угодно).

Есть ли простой способ сделать это? Передайте значение в View, и что тогда?

1 Ответ

12 голосов
/ 05 августа 2009

В моем недавнем проекте я сделал это, используя расширения HtmlHelper и получая данные из коллекции ViewContext.RouteData.Values.

Итак, создаем простое расширение вроде этого:

public static string OnClass(this HtmlHelper html, bool isOn)
{
    if (isOn)
        return " class=\"on\"";

    return string.Empty;
}

Вы можете создать любое количество комбинаций, например,

Просто тестируем текущее действие:

public static string OnClass(this HtmlHelper html, string action)
{
    string currentAction = html.ViewContext.RouteData.Values["action"].ToString();

    return html.OnClass(currentAction.ToLower() == action.ToLower());
}

Тестирование для ряда действий:

public static string OnClass(this HtmlHelper html, string[] actions)
{
    string currentAction = html.ViewContext.RouteData.Values["action"].ToString();

    foreach (string action in actions)
    {
        if (currentAction.ToLower() == action.ToLower())
            return html.OnClass(true);
    }

    return string.Empty;
}

Тестирование на действие и контроллер:

public static string OnClass(this HtmlHelper html, string action, string controller)
{
    string currentController = html.ViewContext.RouteData.Values["controller"].ToString();

    if (currentController.ToLower() == controller.ToLower())
        return html.OnClass(action);

    return string.Empty;
}

и т. Д. И т. Д.

Тогда вы просто называете это в своем представлении (ях) следующим образом:

<ul id="left-menu">
    <!-- simple boolean -->
    <li <%= Html.OnClass(something == somethingElse) %>>Blah</li>
    <!-- action -->
    <li <%= Html.OnClass("Index") %>>Blah</li>
    <!-- any number of actions -->
    <li <%= Html.OnClass(new string[] { "Index", "Details", "View" }) %>>Blah</li>
    <!-- action and controller -->
    <li <%= Html.OnClass("Index", "Home") %>>Blah</li>
</ul>

Как ни крути, расширения HtmlHelper - твой друг! : -)

HTHS
Charles

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