Avec le moteur de vue WebForms, je vais généralement utiliser l'opérateur ternaire pour des conditions très simples, en particulier dans les attributs HTML. Par exemple:
<a class="<%=User.Identity.IsAuthenticated ? "auth" : "anon" %>">My link here</a>
Le code ci-dessus donnera à la <a>
balise une classe auth
ou anon
selon que l'utilisateur est authentifié.
Quelle est la syntaxe équivalente avec le moteur de visualisation Razor? Parce que Razor nécessite des balises HTML pour "savoir" quand sauter dans et hors du code et du balisage, je suis actuellement bloqué 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, pour le moins, terrible .
J'aimerais faire quelque chose comme ça, 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é ainsi de Razor:
<a class="@Html.Conditional(User.Identity.IsAuthenticated, "auth", "anon")">My link here</a>
Pourtant, j'espère qu'il existe un moyen d'utiliser l'opérateur ternaire sans revenir à l'envelopper dans une méthode d'extension.
la source
IHtmlString
avec la méthodenew HtmlString("Some stuff here");
pour les aides, etc ...Réponses:
Vous devriez pouvoir utiliser la
@()
syntaxe d'expression:Je n'ai pas installé Razor, donc je peux me tromper.
la source
Addenda:
Le concept important est que vous évaluez une expression dans votre code Razor. La meilleure façon de le faire (si, par exemple, vous êtes dans une boucle foreach) est d'utiliser une méthode générique.
La syntaxe pour appeler une méthode générique dans Razor est:
Dans ce cas, l'expression est:
Par conséquent, la solution est:
Ce code peut être utilisé n'importe où dans Razor, pas seulement pour un attribut html.
Voir le commentaire de @Kyralessa pour la référence rapide de la syntaxe C # Razor (blog de Phil Haack).
la source
Une version plus simple, pour un regard facile!
la source
Pour ceux d'entre vous qui utilisent ASP.net avec le rasoir VB, l'opérateur ternaire est également possible.
Il doit également figurer dans une expression de rasoir:
et l'opérateur ternaire fonctionne comme suit:
Le même exemple de code montré ici avec le rasoir VB ressemble à ceci:
Remarque: lors de l'écriture d'une TextExpression, n'oubliez pas que les symboles booléens ne sont pas les mêmes entre C # et VB.
la source
dans mon problème, je veux que le texte de l'ancre
<a>text</a>
dans ma vue soit basé sur une certaine valeur et que le texte soit récupéré sous formeApp string Resources
c'est
@()
la solutionsi le texte ne doit pas
App string Resources
utiliser cela source
Vous pouvez également utiliser cette méthode:
Essayez ceci .. Bonne chance Merci.
la source