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éthodenew HtmlString("Some stuff here");
pour les aides etc...0 votes
Tu fais comme stackoverflow.com/questions/6981853/
0 votes
Veuillez voter aquí .
0 votes
En rapport : stackoverflow.com/questions/7729024/asp-net-mvc-razor-ternary