Comment utiliser ? : instructions if avec des blocs de code Razor et inline

Je mets à jour mes anciennes vues .aspx avec le nouveau moteur de vue Razore. J’ai un tas d’endroits où j’ai un code comme celui-ci:

<span class="vote-up">Vote Up 

Idéalement, j’aimerais faire ceci:

 Vote Up 

Cependant, il y a deux problèmes ici:

  1. vote-up@{puzzle.UserVote …. ne traite pas le symbole @ comme un début de bloc de code
  2. @puzzle.UserVote == VoteType.Up examine la première partie @puzzle.UserVote comme s’il était censé rendre la valeur de la variable.

Quelqu’un sait comment résoudre ces problèmes?

Cela devrait fonctionner:

 Vote Up 

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 de CD .. fonctionnera parfaitement bien. Cependant, j’ai eu une situation un peu plus tordue:

  @(Ssortingng.IsNullOrEmpty(Model.MaidenName) ? " " : Model.MaidenName) 

Cela m’imprimerait “& nbsp;” dans ma page, générer respectivement la source &nbsp; . Maintenant, il y a une fonction Html.Raw(" ") qui est supposée vous permettre d’écrire du code source, sauf que dans cette constellation, il génère une erreur de compilation:

Message d’erreur du compilateur: CS0173: Le type d’expression conditionnelle ne peut pas être déterminé car il n’y a pas de conversion implicite entre ‘System.Web.IHtmlSsortingng’ et ‘ssortingng’

J’ai donc fini par écrire une déclaration comme celle-ci, ce qui est moins agréable mais fonctionne même dans mon cas:

 @if (Ssortingng.IsNullOrEmpty(Model.MaidenName)) { @Html.Raw(" ") } else { @Model.MaidenName } 

Note: une chose intéressante est que, une fois que vous êtes dans l’accolade, vous devez redémarrer un bloc Razor.