Conditionnellement ajouter htmlAttributes à ASP.NET MVC Html.ActionLink
-
26-09-2019 - |
Question
Je me demande s'il est possible d'ajouter conditionnellement un paramètre dans un appel à une méthode.
Par exemple, je suis rendu un tas de liens (six au total) pour la navigation dans mon Site.master:
<%= Html.ActionLink("About", "About", "Pages") %> |
<%= Html.ActionLink("Contact", "Contact", "Pages") %>
<%-- etc, etc. --%>
Je voudrais inclure une classe CSS de « sélectionné » pour le lien si elle est sur cette page. Donc, dans mon contrôleur je retourne ceci:
ViewData.Add("CurrentPage", "About");
return View();
Et puis dans l'opinion que j'ai un htmlAttributes dictionnaire:
<% Dictionary<string,object> htmlAttributes = new Dictionary<string,object>();
htmlAttributes.Add("class","selected");%>
Maintenant, ma seule question est de savoir comment puis-je inclure les htmlAttributes pour la ActionLink appropriée. Je pourrais le faire de cette façon pour chaque lien:
<% htmlAttributes.Clear();
if (ViewData["CurrentPage"] == "Contact") htmlAttributes.Add("class","selected");%>
<%= Html.ActionLink("Contact", "Contact", "Pages", htmlAttributes) %>
Mais cela semble un peu répétitif. Est-il possible de faire quelque chose comme ce pseudo-code:
<%= Html.ActionLink("Contact", "Contact", "Pages", if(ViewData["CurrentPage"] == "Contact") { htmlAttributes }) %>
C'est évidemment pas une syntaxe valide, mais est-il une bonne façon de le faire? Je suis ouvert à toute suggestion tout à fait différentes pour rendre ces liens. Je voudrais rester avec quelque chose comme ActionLink qui profite d'utiliser mes routes bien au lieu de coder en dur la balise.
La solution
Voici trois options:
<%= 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>