476 votes

Comment utiliser l'opérateur ternaire dans razor (spécifiquement sur les attributs HTML) ?

Avec le moteur de visualisation WebForms, j'utiliserai couramment l'opérateur ternaire pour des conditions très simples, notamment dans les attributs HTML. Par exemple :

<a class="<%=User.Identity.IsAuthenticated ? "auth" : "anon" %>">My link here</a>

Le code ci-dessus donnera le <a> étiqueter une classe de auth o anon selon que l'utilisateur est authentifié ou non.

Quelle est la syntaxe équivalente avec le moteur de vue Razor ? Comme Razor exige que les balises HTML "sachent" quand entrer et sortir du code et du balisage, je suis actuellement coincé avec ce qui suit :

@if(User.Identity.IsAuthenticated)  { <a class="auth">My link here</a> }
else { <a class="anon">My link here</a> }

C'est le moins qu'on puisse dire, terrible .

J'aimerais faire quelque chose comme mais j'ai du mal à comprendre comment dans Razor :

<a class="@=User.Identity.IsAuthenticated ? "auth" : "anon";">My link here</a>

--

Mise à jour :

En attendant, j'ai créé ce HtmlHelper :

public static MvcHtmlString Conditional(this HtmlHelper html, Boolean condition, String ifTrue, String ifFalse)
{
  return MvcHtmlString.Create(condition ? ifTrue : ifFalse);
}

qui peut être appelé comme ceci à partir de Razor :

<a class="@Html.Conditional(User.Identity.IsAuthenticated, "auth", "anon")">My link here</a>

J'espère néanmoins qu'il existe un moyen d'utiliser l'opérateur ternaire sans avoir à l'intégrer dans une méthode d'extension.

0 votes

Juste pour une question de "meilleure pratique", je pense que vous devriez renvoyer le type IHtmlString avec la méthode new HtmlString("Some stuff here"); pour les aides etc...

0 votes

0 votes

Veuillez voter aquí .

2voto

Arjun Points 261

Vous pouvez également utiliser cette méthode :

<input type="text" class="@(@mvccondition ? "true-class" : "false-class")">

Essayez ceci. Bonne chance. Merci.

0voto

Alan Simpson Points 21

J'ai un champ nommé IsActive dans les lignes de la table qui est vrai lorsqu'un élément a été supprimé. Ce code applique une classe CSS appelée strikethrough uniquement aux éléments supprimés. Vous pouvez voir comment il utilise l'opérateur ternaire C# :

<tr class="@(@businesstypes.IsActive ? "" : "strikethrough")">

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X