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.

Était-ce utile?

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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top