Pourquoi la mise en forme du code Visual Studio ne fonctionne-t-elle pas correctement pour le balisage Razor?

Ou devrais-je plutôt demander quand le formatage du code VS fonctionnera correctement pour le balisage Razor? Le formatage fonctionne pour la plupart des structures, mais il semble s’étouffer avec les blocs “si”. Le code ci-dessous est tel qu’il est formaté par VS. Il est très facile de résoudre ce problème, avec une autre indentation, mais j’ai bien accepté le formatage au quotidien et je l’utilise souvent pour la majeure partie de mon code, donc je préfère éviter le formatage manuel si possible. En ce moment, je le laisse comme VS le met au format.

@{ if (User.Identity.IsAuthenticated) { Hello  @Html.Display("@ViewBag.UserName")  -  @Html.ActionLink("Sign Out", "LogOff", "Account", null, new { style = "font-weight: bold;" }) } } 

Je pense que c’est important pour la lisibilité que, par exemple, dans le précédent, le corps du bloc if est en retrait, en plus d’être plus joli.

Veillez à définir l’éditeur pour qu’il utilise des caractères d’espacement et non des tabulations. L’éditeur semble complètement perdre la tête lorsque des tabs sont utilisés. C’est dommage car tous ces caractères d’espace se retrouvent dans la sortie HTML réelle, ce qui augmente considérablement la taille du transfert de données. Ce que je fais est de compléter manuellement le formatage automatique que je tape. Pas idéal, mais Microsoft espère que cela sera compris dans le prochain service pack.

J’ai trouvé une “solution” qui vous permet de continuer à utiliser l’indentation par tabulation et d’avoir une mise en forme correcte. C’est plus un motif. La clé est d’utiliser des blocs de code de razor au lieu du code en ligne.

Par exemple, remplacez ce qui suit:

 
@if (true) { Hi }

avec:

 
@{ if (true) { Hi } }

Ce dernier formatera correctement, mais le premier ne le fera pas.

Gardez à l’esprit que le formatage n’est pas parfait, mais c’est mieux qu’avant.

Cela ne fonctionne pas correctement dans tous les cas car c’est un problème difficile à résoudre. Essentiellement, vous avez 3 éditeurs différents (HTML, C # et Razor) qui interagissent tous sur le même tampon de texte. Il y a des cas (comme celui-ci) où les interactions ont des bogues. Mais nous travaillons à l’amélioration de l’éditeur pour la prochaine version de Razor.

Une meilleure alternative ici (plutôt que d’utiliser des espaces pour les tabs) consiste à remplacer le retrait de bloc pour HTML et C # / VB par “Bloquer” au lieu de “Intelligent”. Ce n’est pas une solution complète, mais IMO est un travail beaucoup moins pénible que l’utilisation des espaces!

Je sais que ce n’est pas vraiment la réponse que vous recherchez, mais j’ai utilisé WriteLiteral pour contourner mes problèmes de mise en forme.

Par exemple, quand j’écris:

 
@foreach (var item in Model) { if (condition) { @:

Visual Studio essaie de le changer pour:

 
@foreach (var item in Model) { if (condition) { @:

Ce qui provoque la page à jeter une erreur.

Si vous utilisez WriteLiteral, vous pouvez tromper le formateur en ignorant la ligne, mais ce n’est pas joli:

 
@foreach (var item in Model) { if (condition) { WriteLiteral("
"); } @item.Label }

Dans mon cas, il était préférable de redéfinir les options de formatage.

Si vous utilisez reshaper et obtenir ce problème, essayez ceci …

Resharper >> Options >> Razor >> Éditeur et formatage >> Décochez “Auto-format on enter”

J’ai trouvé une autre solution pour cela. Il suffit de sélectionner tout le code dans le fichier, cliquez sur Maj + tab pour supprimer tous les tabs avant le code, copiez-le et collez-le. Visual Studio format automatiquement le code. Travailler sur le fichier VS 2013 .cshtml

En ce moment, je suis sur VS2013 ASP.NET MVC 5 et j’ai toujours ce problème. Ce que j’ai trouvé très utile est de placer la première expression sur la même ligne où se trouve le symbole du bloc d’ouverture ( @{ ). De cette manière, le formatage des codes de razor produit un résultat bien meilleur. Voici les cas avant et après:

AVANT

**AVANT**

APRÈS

entrer la description de l'image ici

Je vous recommande de ne pas déclencher le formatage automatique en commentant le morceau de code où vous collez. De cette façon, les choses ne sont pas cassées sur la pâte.