Com o mecanismo de exibição WebForms, usarei normalmente o operador ternário para condicionais muito simples, especialmente dentro de atributos HTML. Por exemplo:
<a class="<%=User.Identity.IsAuthenticated ? "auth" : "anon" %>">My link here</a>
O código acima atribuirá à <a>
tag uma classe auth
ou anon
dependendo de o usuário estar autenticado.
Qual é a sintaxe equivalente ao mecanismo de exibição Razor? Como o Razor exige que as tags HTML "saibam" quando entrar e sair do código e da marcação, atualmente estou preso ao seguinte:
@if(User.Identity.IsAuthenticated) { <a class="auth">My link here</a> }
else { <a class="anon">My link here</a> }
Isto é, para dizer o mínimo, terrível .
Eu adoraria fazer algo assim , mas estou lutando para entender como no Razor:
<a class="@=User.Identity.IsAuthenticated ? "auth" : "anon";">My link here</a>
-
Atualizar:
Enquanto isso, eu criei este HtmlHelper:
public static MvcHtmlString Conditional(this HtmlHelper html, Boolean condition, String ifTrue, String ifFalse)
{
return MvcHtmlString.Create(condition ? ifTrue : ifFalse);
}
que pode ser chamado assim pelo Razor:
<a class="@Html.Conditional(User.Identity.IsAuthenticated, "auth", "anon")">My link here</a>
Ainda assim, espero que haja uma maneira de usar o operador ternário sem voltar a envolvê-lo em um método de extensão.
IHtmlString
com o métodonew HtmlString("Some stuff here");
para ajudantes etc ...