razor www ¿Cómo usar el operador ternario en la maquinilla de afeitar(específicamente en los atributos HTML)?




www asp net mvc mvc4 (4)

Apéndice:

El concepto importante es que estás evaluando una expresión en tu código de Razor. La mejor manera de hacer esto (si, por ejemplo, estás en un bucle foreach) es usando un método genérico.

La sintaxis para llamar a un método genérico en Razor es:

@(expression)

En este caso, la expresión es:

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

Por lo tanto, la solución es:

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

Este código se puede usar en cualquier parte de Razor, no solo para un atributo html.

Vea el comentario de @Kyralessa para la referencia rápida de sintaxis de C # Razor (blog de Phil Haack).

https://code.i-harness.com

Con el motor de visualización de WebForms, comúnmente usaré el operador ternario para condicionales muy simples, especialmente dentro de atributos HTML. Por ejemplo:

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

El código anterior le dará a la etiqueta <a> una clase de auth o anon dependiendo de si el usuario está autenticado.

¿Cuál es la sintaxis equivalente con el motor de visualización de Razor? Debido a que Razor requiere etiquetas HTML para "saber" cuándo saltar dentro y fuera 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>

Sin embargo, espero que haya una forma de utilizar el operador ternario sin recurrir a un método de extensión.


Deberías poder usar la sintaxis de la expresión @() :

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

Sin embargo, no tengo Razor instalada, así que podría estar equivocada.


También puedes usar este método:

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

Intenta esto ... Buena suerte Gracias.


Una versión más sencilla, para ojos fáciles!

@(true?"yes":"no")




asp.net-mvc-3