Con el motor de vista de WebForms, comúnmente usaré el operador ternario para condicionales muy simples, especialmente dentro de los atributos HTML. Por ejemplo:
<a class="<%=User.Identity.IsAuthenticated ? "auth" : "anon" %>">My link here</a>
El código anterior le dará a la <a>
etiqueta una clase de auth
o anon
dependiendo de si el usuario está autenticado.
¿Cuál es la sintaxis equivalente con el motor de vista Razor? Debido a que Razor requiere que las etiquetas HTML "sepan" cuándo entrar y salir del código y el marcado, actualmente estoy atascado con lo siguiente:
@if(User.Identity.IsAuthenticated) { <a class="auth">My link here</a> }
else { <a class="anon">My link here</a> }
Esto es, por decirlo suavemente, terrible .
Me encantaría hacer algo como esto, pero me cuesta entender cómo en Razor:
<a class="@=User.Identity.IsAuthenticated ? "auth" : "anon";">My link here</a>
-
Actualizar:
Mientras tanto, he creado este HtmlHelper:
public static MvcHtmlString Conditional(this HtmlHelper html, Boolean condition, String ifTrue, String ifFalse)
{
return MvcHtmlString.Create(condition ? ifTrue : ifFalse);
}
que se puede llamar así desde Razor:
<a class="@Html.Conditional(User.Identity.IsAuthenticated, "auth", "anon")">My link here</a>
Aún así, espero que haya una manera de usar el operador ternario sin recurrir a un método de extensión.
IHtmlString
con el métodonew HtmlString("Some stuff here");
de ayudantes, etc ...