Traiter avec ASP.NET MVC “tag soup”

Je travaillais sur un modèle ASP.NET MVC aujourd’hui et, après avoir regardé tous ces tags % jaunes fluorescents assez longtemps, j’ai décidé que j’en avais assez, alors j’ai soigneusement modifié mon fichier ascx pour qu’il ressemble à ceci:

     1) { %>    pm.ShowForDisplay && !ViewData.TemplateInfo.Visited(pm))) { %>               

Ahh la lisibilité enfin. Le seul problème est qu’il faut beaucoup de temps pour le faire à la main. J’ai besoin d’un moyen d’automatiser cela. Une sorte de solution de formatage du code. Peut-être une macro ou un complément Visual Studio ou …? Que conseillez-vous?

Mettre à jour

Je prévois maintenant de reformuler l’essentiel de la logique de mon balisage (voir la réponse de Mike ci-dessous), mais dans le même temps, j’ai trouvé un moyen plus simple de formater des fichiers ascx contenant du code et du code HTML. Le code est un peu plus dispersé de cette façon, mais il est beaucoup plus facile de le formater de la sorte, et il est beaucoup plus facile de travailler avec.

     1) { %>    pm.ShowForDisplay && !ViewData.TemplateInfo.Visited(pm))) { if (prop.HideSurroundingHtml) { %>   

Je pense que votre douleur “en soupe” est en réalité le symptôme d’un problème différent: vous la ressentez parce que vous avez une logique. Les vues doivent être très légères, avec peu ou pas de logique. Votre logique devrait être dans vos contrôleurs, qui peuvent décider de rendre différentes vues en fonction de la logique. Ou vous pouvez mettre la logique dans des aides.

Voir cet article de Rob Conery

Avec le modèle de vue approprié (et éventuellement avec le moteur de vue par étincelle), il n’ya pas de soupe tag.

Particulièrement si des modèles sont utilisés.

Je ne peux pas en dire beaucoup sur cet exemple (encore moins – pour résoudre ce problème), mais pour moi, il s’agit généralement de sens de propreté et de capacité à structurer les choses correctement.


“Je recherche une solution de formatage du code.” => alors vous devez vérifier l’étincelle. Il “htmlifie” vos vues, même si elles contiennent de la logique.

Votre exemple dedans (sans rien restructurer) =>

   ${nullText}   ${simpleDisplayText}     ${Html.Display(prop.PropertyName)}    ${prop.GetDisplayName()}   ${Html.Display(prop.ProperyName)}     

Peut-être que vous vous trompez quelque part, mais vous avez eu l’idée.

Pour notre projet actuel, nous avons un peu nettoyé tous les if-els en écrivant un assistant HTML:

 public static void WriteIf(this HtmlHelper helper, bool condition, ssortingng truePart, ssortingng falsePart) { helper.ViewContext.HttpContext.Response.Write(condition ? truePart : falsePart); } 

et puis dans le HTML, vous diriez:

 <% Html.WriteIf(Model.IsTrue(), "TrueText", "FalseText"); %>