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




que update (6)

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.


Answers

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.


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).


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

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

Para aquellos de ustedes que usan ASP.net con la máquina de afeitar VB, el operador ternario también es posible.

También debe estar dentro de una expresión de afeitar:

@(Razor_Expression)

y el operador ternario funciona de la siguiente manera:

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

El mismo ejemplo de código que se muestra aquí con la afeitadora VB se ve así:

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

Nota: cuando escriba una expresión de texto, recuerde que los símbolos booleanos no son los mismos entre C # y VB.


También puedes usar este método:

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

Intenta esto ... Buena suerte Gracias.


Pruebe con Jquery, en la página que no desea indexar, agregue

$('head').append('<meta name="robots" content="noindex,nofollow"/>');

Editar:

Otro intento podría ser (de acuerdo con esto, ¿el rastreo del robot de Googlebot cambia al DOM creado con JavaScript? ) para probar con javascript simple en lugar de la biblioteca jquery.

document.getElementsByTagName('head')[0].appendChild('<meta name="robots" content="noindex,nofollow"/>');




razor asp.net-mvc-3