Условно добавить HTMLATTribute для ASP.NET MVC HTML.ActionLink
-
26-09-2019 - |
Вопрос
Мне интересно, можно ли условно добавить параметр в вызов методу.
Например, я рендурирую кучу ссылок (шесть всего) для навигации на моем сайте. Мастер:
<%= Html.ActionLink("About", "About", "Pages") %> |
<%= Html.ActionLink("Contact", "Contact", "Pages") %>
<%-- etc, etc. --%>
Я хотел бы включить класс CSS «выбранный» для ссылки, если она на этой странице. Так что в моем контроллере я возвращаю это:
ViewData.Add("CurrentPage", "About");
return View();
А потом на мнению у меня есть словарь htmlattribute:
<% Dictionary<string,object> htmlAttributes = new Dictionary<string,object>();
htmlAttributes.Add("class","selected");%>
Теперь мой единственный вопрос - это то, как я могу включить HTMLATTribute для правильной ActionLink. Я мог бы сделать это таким образом для каждой ссылки:
<% htmlAttributes.Clear();
if (ViewData["CurrentPage"] == "Contact") htmlAttributes.Add("class","selected");%>
<%= Html.ActionLink("Contact", "Contact", "Pages", htmlAttributes) %>
Но это кажется немного повторяющимся. Есть ли какой-то способ сделать что-то вроде этого кода PSuedo:
<%= Html.ActionLink("Contact", "Contact", "Pages", if(ViewData["CurrentPage"] == "Contact") { htmlAttributes }) %>
Это, очевидно, не допустимый синтаксис, но есть ли правильный способ сделать это? Я открыт для любых совершенно разных предложений для оказания этих ссылок. Я хотел бы остаться с чем-то вроде Doachlink, который пользуется преимуществом использования моих маршрутов, хотя вместо жесткого кодирования тега.
Решение
Вот три варианта:
<%= Html.ActionLink("Contact", "Contact", "Pages",
new { @class = ViewData["CurrentPage"] == "Contact" ? "selected" : "" }) %>
<%= Html.ActionLink("Contact", "Contact", "Pages",
ViewData["CurrentPage"] == "Contact" ? new { @class = "selected" } : null) %>
<a href="<%=Url.Action("Contact", "Pages")%>"
class="<%=ViewData["CurrentPage"] == "Contact" ? "selected" : "" %>">Contact</a>