Изменение меню в зависимости от контроллера в ASP.NET MVC - PullRequest
1 голос
/ 14 июня 2009

На главной странице как узнать, какой контроллер я сейчас использую? Есть ли какой-то объект контекста, который может дать мне такую ​​информацию?

Стандартное меню

<ul>
<li>Fire</li>
<li>Ice</li>
<li>Water</li>
</ul>

Меню, если я в контроллере воды

<ul>
<li>Fire</li>
<li>Ice</li>
<li class="selected">Water</li>
</ul>

Если у меня в Site.master есть меню, где каждый элемент меню относится к отдельному контроллеру, как я могу выделить каждый элемент меню в зависимости от того, в каком контроллере я сейчас нахожусь?

Я знаю, что могу получить URL-адрес из request.Servervariables, а затем применить некоторую магию строк, но должен быть лучший способ - какой-то объект контекста?

Ответы [ 3 ]

2 голосов
/ 14 июня 2009

Свойство ViewContext ViewMasterPage содержит Controller и RouteData для запроса. Вы можете посмотреть на имя типа контроллера или клавишу controller в данных маршрута, чтобы узнать, какой контроллер был вызван.

1 голос
/ 14 июня 2009

Вот два вспомогательных метода, которые я использую для проверки текущего контроллера или даже текущего действия. Вы можете использовать помощники, чтобы определить, добавлять ли class = "selected" или нет.

public static bool IsCurrentController(this HtmlHelper helper, 
                                       string controllerName)
{
    string currentControllerName = (string)helper.ViewContext.RouteData.
                                   Values["controller"];

    if (currentControllerName.Equals(controllerName,
        StringComparison.CurrentCultureIgnoreCase))
    {
       return true;
    }

    return false;
}

public static bool IsCurrentAction(this HtmlHelper helper, string actionName, 
                                   string controllerName)
{
    string currentControllerName = (string)helper.ViewContext.RouteData
                                   .Values["controller"];
    string currentActionName = (string)helper.ViewContext.RouteData
                               .Values["action"];

    if (currentControllerName.Equals(controllerName,
        StringComparison.CurrentCultureIgnoreCase) && 
        currentActionName.Equals(actionName, 
                                 StringComparison.CurrentCultureIgnoreCase))
    {
        return true;
    }

    return false;
}
1 голос
/ 14 июня 2009

Вы можете сделать

ViewContext.Controller.GetType (). Имя * * 1004

Это должно сделать это.

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