Je mets à jour mes anciennes vues .aspx avec le nouveau moteur de vue Razore. J'ai un tas d'endroits où j'ai du code comme celui-ci:
<span class="vote-up<%= puzzle.UserVote == VoteType.Up ? "-selected" : "" %>">Vote Up</span>
Idéalement, j'aimerais faire ceci:
<span class="vote-up@{puzzle.UserVote == VoteType.Up ? "-selected" : ""}">Vote Up</span>
Cependant, il y a deux problèmes ici:
vote-up@{puzzle.UserVote
.... ne traite pas le symbole @ comme le début d'un bloc de code@puzzle.UserVote == VoteType.Up
regarde la première partie@puzzle.UserVote
comme si elle était censée rendre la valeur de la variable.
Quelqu'un sait comment résoudre ces problèmes?
@(puzzle.UserVote == VoteType.Up ? "-selected" : "")
@(isSomething ? "class='test'" : "")
exemple en injectant du javascript ou similaire, il les encodera comme des entités comme'
et cassera la page. Vous devez donc utiliserHtml.Raw("..")
. Sinon, avec le code ci-dessus, vous vous retrouveriez avec quelque chose comme<p class='test'>
qui n'est pas valide.Réponses:
Cela devrait fonctionner:
la source
La clé est d'encapsuler l'expression entre parenthèses après le délimiteur @. Vous pouvez faire fonctionner n'importe quelle expression composée de cette façon.
la source
la source
Dans la plupart des cas, la solution de CD .. fonctionnera parfaitement bien. Cependant, j'avais une situation un peu plus tordue:
Cela m'imprimerait "& nbsp;" dans ma page, respectivement générer la source
&nbsp;
. Maintenant, il existe une fonctionHtml.Raw(" ")
qui est censée vous permettre d'écrire du code source, sauf que dans cette constellation, elle génère une erreur de compilation:J'ai donc fini par écrire une déclaration comme celle-ci, qui est moins agréable mais fonctionne même dans mon cas:
Remarque: ce qui est intéressant, c'est qu'une fois que vous êtes à l'intérieur de l'accolade, vous devez redémarrer un bloc Razor.
la source
@(String.IsNullOrEmpty(Model.MaidenName) ? Html.Raw(" ") : Model.MaidenName)
@(String.IsNullOrEmpty(Model.MaidenName) ? Html.Raw(" ") : Html.Raw(Model.MaidenName))