razor - update - ¿Cómo usar el operador ternario en la maquinilla de afeitar(específicamente en los atributos HTML)?
sintaxis razor mvc 5 (6)
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).
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.
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.
Una versión más sencilla, para ojos fáciles!
@(true?"yes":"no")
en mi problema quiero que el texto del ancla <a>text</a>
dentro de mi vista se base en algún valor y que el texto se recupere de la App string Resources
Entonces, esta @()
es la solución.
<a href=''#''>
@(Model.ID == 0 ? Resource_en.Back : Resource_en.Department_View_DescartChanges)
</a>
Si el texto no es de la App string Resources
@(Model.ID == 0 ? "Back" :"Descart Changes")