Je mets à jour mes anciennes vues .aspx avec le nouveau moteur de vues Razore. J'ai un tas d'endroits où j'ai un 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 un début de bloc de code@puzzle.UserVote == VoteType.Up
regarde la première partie @puzzle.UserVote
comme s'il était supposé rendre la valeur de la variable.Quelqu'un sait comment résoudre ces problèmes?
Cela devrait fonctionner:
<span class="vote-up@(puzzle.UserVote == VoteType.Up ? "-selected" : "")">Vote Up</span>
La clé est d'encapsuler l'expression entre parenthèses après le @ délimiteur. Vous pouvez faire en sorte que toute expression composée fonctionne de cette façon.
@( condition ? "true" : "false" )
Dans la plupart des cas, la solution sur CD .. fonctionnera parfaitement. Cependant, j'ai eu une situation un peu plus tordue:
@(String.IsNullOrEmpty(Model.MaidenName) ? " " : Model.MaidenName)
Cela m'imprimerait "nbsp;" dans ma page, générer respectivement la source &nbsp;
. Maintenant, il existe une fonction Html.Raw(" ")
qui est supposée vous permettre d'écrire du code source, sauf que dans cette constellation, une erreur de compilation est générée:
Message d'erreur du compilateur: CS0173: Le type de l'expression conditionnelle ne peut pas être déterminé car il n'y a pas de conversion implicite entre 'System.Web.IHtmlString' et 'string'
J'ai donc fini par écrire une déclaration comme celle-ci, moins belle mais qui fonctionne même dans mon cas:
@if (String.IsNullOrEmpty(Model.MaidenName)) { @Html.Raw(" ") } else { @Model.MaidenName }
Remarque: la chose intéressante est qu'une fois que vous êtes à l'intérieur de l'accolade, vous devez redémarrer un bloc Razor.