Определение имени текущего представления в частичном представлении в ASP.NET MVC

StackOverflow https://stackoverflow.com/questions/1141954

Вопрос

У меня есть частичное представление в моем тестовом приложении ASP.NET MVC. Это представление отвечает за отображение кнопок меню приложений.

Я хочу изменить цвет кнопки, которая в настоящее время является активной страницей. В настоящее время я написал что -то вроде:

<ul id="menu">
    <% var activeClass = (string)(ViewData["currentPage"]) == "Home" ? "activeMenuButton" : ""; %>    
    <li><%= Html.ActionLink ("Home", "Index", "Home", new { @class = activeClass })%></li>

    <% activeClass = (string)(ViewData["currentPage"]) == "About" ? "activeMenuButton" : ""; %>    
    <li><%= Html.ActionLink ("About", "About", "Home", new { @class = activeClass })%></li>
</ul>

И установите данные View в действиях контроллера:

//in home action
ViewData["currentPage"] = "Home";

//in About action
ViewData["currentPage"] = "About";

Это работает, но я должен изменить каждое действие контроллера. Есть ли лучший метод автоматического обнаружения представления и каким -то образом изменить код частичного представления, чтобы соответственно изменить цвет.

Это было полезно?

Решение

Я думаю, что вам не нужны ViewData [«CurrentPage»]. Использовать ViewContext.RouteData.Values вместо:

Попробуй это:

<ul id="menu">
    <% var activeClass = (ViewContext.RouteData.Values["Controller"] == "Home"
        && ViewContext.RouteData.Values["Action"] == "Home") ? "activeMenuButton" : ""; %>

    <li><%= Html.ActionLink ("Home", "Index", "Home", new { @class = activeClass })%></li>

    <% activeClass = (ViewContext.RouteData.Values["Controller"] == "Home"
        && ViewContext.RouteData.Values["Action"] == "About") ? "activeMenuButton" : ""; %>

    <li><%= Html.ActionLink ("About", "About", "Home", new { @class = activeClass })%></li>
</ul>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top