Estoy actualizando mis viejas vistas .aspx con el nuevo motor de vista Razore. Tengo un montón de lugares donde tengo un código como este:
<span class="vote-up<%= puzzle.UserVote == VoteType.Up ? "-selected" : "" %>">Vote Up</span>
Idealmente me gustaría hacer esto:
<span class="vote-up@{puzzle.UserVote == VoteType.Up ? "-selected" : ""}">Vote Up</span>
Sin embargo, hay dos problemas aquí:
vote-up@{puzzle.UserVote
.... no trata el símbolo @ como el inicio de un bloque de código@puzzle.UserVote == VoteType.Up
mira la primera parte@puzzle.UserVote
como si se supusiera que representa el valor de la variable.
¿Alguien sabe cómo abordar estos problemas?
@(puzzle.UserVote == VoteType.Up ? "-selected" : "")
@(isSomething ? "class='test'" : "")
ejemplo, inyectando javascript o similar, los codificará como entidades'
y romperá la página. Entonces debes usarHtml.Raw("..")
. De lo contrario, con el código anterior, terminaría con algo como lo<p class='test'>
que no es válido.Respuestas:
Esto debería funcionar:
fuente
La clave es encapsular la expresión entre paréntesis después del delimitador @. Puede hacer que cualquier expresión compuesta funcione de esta manera.
fuente
fuente
En la mayoría de los casos, la solución de CD ... funcionará perfectamente bien. Sin embargo, tuve una situación un poco más retorcida:
Esto me imprimiría "& nbsp;" en mi página, genero respectivamente la fuente
&nbsp;
. Ahora hay una funciónHtml.Raw(" ")
que se supone que te permite escribir el código fuente, excepto en esta constelación que arroja un error de compilación:Así que terminé escribiendo una declaración como la siguiente, que es menos agradable pero funciona incluso en mi caso:
Nota: lo interesante es que, una vez que esté dentro de la llave, debe reiniciar un bloque Razor.
fuente
@(String.IsNullOrEmpty(Model.MaidenName) ? Html.Raw(" ") : Model.MaidenName)
@(String.IsNullOrEmpty(Model.MaidenName) ? Html.Raw(" ") : Html.Raw(Model.MaidenName))