Определение имени текущего представления в частичном представлении в ASP.NET MVC
-
16-09-2019 - |
Вопрос
У меня есть частичное представление в моем тестовом приложении 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>
Не связан с StackOverflow