Con el motor de vista de WebForms, comúnmente usaré el operador ternario para condicionales muy simples, especialmente dentro de los atributos HTML. Por ejemplo:
<a class="<%=User.Identity.IsAuthenticated ? "auth" : "anon" %>">My link here</a>
El código anterior le dará a la <a>
etiqueta una clase de auth
o anon
dependiendo de si el usuario está autenticado.
¿Cuál es la sintaxis equivalente con el motor de vista Razor? Debido a que Razor requiere que las etiquetas HTML "sepan" cuándo entrar y salir 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>
Aún así, espero que haya una manera de usar el operador ternario sin recurrir a un método de extensión.
fuente
IHtmlString
con el métodonew HtmlString("Some stuff here");
de ayudantes, etc ...Respuestas:
Debería poder usar la
@()
sintaxis de expresión:Sin embargo, no tengo Razor instalado, así que podría estar equivocado.
fuente
Apéndice:
El concepto importante es que está evaluando una expresión en su código Razor. La mejor manera de hacer esto (si, por ejemplo, está en un bucle foreach) es usar un método genérico.
La sintaxis para llamar a un método genérico en Razor es:
En este caso, la expresión es:
Por lo tanto, la solución es:
Este código se puede usar en cualquier lugar de Razor, no solo para un atributo html.
Vea el comentario de @Kyralessa para C # Razor Syntax Quick Reference (blog de Phil Haack).
fuente
¡Una versión más simple, para ojos fáciles!
fuente
Para aquellos de ustedes que usan ASP.net con la maquinilla de afeitar VB, el operador ternario también es posible.
También debe estar dentro de una expresión de afeitar:
y el operador ternario funciona de la siguiente manera:
El mismo ejemplo de código que se muestra aquí con la maquinilla de afeitar VB se ve así:
Nota: al escribir una TextExpression recuerde que los símbolos booleanos no son lo mismo entre C # y VB.
fuente
en mi problema, quiero que el texto de anclaje
<a>text</a>
dentro de mi vista se base en algún valor y ese texto se recupere de formaApp string Resources
entonces esta
@()
es la soluciónsi el texto no es de
App string Resources
usar estofuente
También puedes usar este método:
Prueba esto .. Buena suerte Gracias.
fuente