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.
fonte
IHtmlString
com o métodonew HtmlString("Some stuff here");
para ajudantes etc ...Respostas:
Você deve poder usar a
@()
sintaxe da expressão:Eu não tenho o Razor instalado, então posso estar errado.
fonte
Termo aditivo:
O conceito importante é que você está avaliando uma expressão no seu código Razor. A melhor maneira de fazer isso (se, por exemplo, você estiver em um loop foreach), é usando um método genérico.
A sintaxe para chamar um método genérico no Razor é:
Nesse caso, a expressão é:
Portanto, a solução é:
Este código pode ser usado em qualquer lugar do Razor, não apenas para um atributo html.
Consulte o comentário de @Kyralessa para a Referência rápida de sintaxe do C # Razor (blog de Phil Haack).
fonte
Uma versão mais simples, para olhos fáceis!
fonte
Para aqueles que usam o ASP.net com o VB razor, o operador ternário também é possível.
Também deve estar dentro de uma expressão de barbear:
e o operador ternário funciona da seguinte maneira:
O mesmo exemplo de código mostrado aqui com o VB razor é assim:
Nota: ao escrever uma TextExpression, lembre-se de que os símbolos booleanos não são os mesmos entre C # e VB.
fonte
no meu problema, quero que o texto da âncora
<a>text</a>
dentro da minha visão seja baseado em algum valor e que o texto seja recuperadoApp string Resources
então, esta
@()
é a soluçãose o texto não for de
App string Resources
uso estefonte
Você também pode usar este método:
Tente isso .. Boa sorte Obrigado.
fonte