razor - inserir - o que e alt text



Como usar o operador ternário no barbeador(especificamente em atributos HTML)? (4)

Termo aditivo:

O conceito importante é que você está avaliando uma expressão em seu código Razor. A melhor maneira de fazer isso (se, por exemplo, você está em um loop foreach) está usando um método genérico.

A sintaxe para chamar um método genérico no Razor é:

@(expression)

Nesse caso, a expressão é:

User.Identity.IsAuthenticated ? "auth" : "anon"

Portanto, a solução é:

@(User.Identity.IsAuthenticated ? "auth" : "anon")

Este código pode ser usado em qualquer lugar no Razor, não apenas para um atributo html.

Veja o comentário de @Kyralessa para C # Razor Syntax Quick Reference (blog de Phil Haack).

Com o mecanismo de visualização WebForms, normalmente utilizarei o operador ternário para condicionais muito simples, especialmente nos atributos HTML. Por exemplo:

<a class="<%=User.Identity.IsAuthenticated ? "auth" : "anon" %>">My link here</a>

O código acima dará à tag <a> uma classe de auth ou anon dependendo de o usuário ser autenticado.

Qual é a sintaxe equivalente ao mecanismo de visualização Razor? Como o Razor requer que as tags HTML "saibam" quando entrar e sair do código e da marcação, estou atualmente preso com o 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:

Entretanto, 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 da 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.


Answer #1

Para aqueles de vocês que usam ASP.net com navalha VB, o operador ternário também é possível.

Deve ser, também, dentro de uma expressão de navalha:

@(Razor_Expression)

e o operador ternário funciona da seguinte maneira:

If(BooleanTestExpression, "TruePart", "FalsePart")

O mesmo exemplo de código mostrado aqui com o VB razor é assim:

<a class="@(If(User.Identity.IsAuthenticated, "auth", "anon"))">My link here</a>

Nota: ao escrever um TextExpression, lembre-se de que os símbolos booleanos não são os mesmos entre C # e VB.


Answer #2

Você deve poder usar a sintaxe da expressão @() :

<a class="@(User.Identity.IsAuthenticated ? "auth" : "anon")">My link here</a>

Eu não tenho o Razor instalado, então eu posso estar errado.


Answer #3

Você também pode usar este método:

<input type="text" class="@(@mvccondition ? "true-class" : "false-class")">

Tente isso .. Boa sorte Obrigado.





asp.net-mvc-3