J'ai la conviction que le balisage doit rester dans le balisage et non dans le code derrière.
Je suis arrivé à une situation où je pense qu'il est acceptable de construire le code HTML dans le code derrière. J'aimerais avoir un certain consensus sur les bonnes ou les meilleures pratiques.
Quand est-il acceptable de construire du HTML dans le code derrière? Quelle est la meilleure méthode pour créer ce html? (exemple: Strings, StringBuilder, HTMLWriter, etc.)
Est-ce que l'utilisation de quelque chose comme Razor ne s'applique pas ici? Parce que si vous faites beaucoup de génération html à l'aide d'un moteur de vue, cela peut être beaucoup plus facile. Il a également été conçu pour être utilisé en dehors d'ASP.NET.
Mais parfois, ce n'est pas ce dont vous avez besoin. Avez-vous envisagé d'utiliser la classe TagBuilder qui fait partie de .net (mvc)? Il y a aussi HtmlWriter dans System.Web.UI (pour les formulaires Web). Je recommanderais l'un d'entre eux si vous faites Controls
ou Html Helpers
.
J'utiliserais le Html Agility Pack pour assembler le HTML puis l'écrire dans un fichier texte.
De nombreuses heures de travail ont été nécessaires pour rendre le pack d'agilité Html robuste et Compatible HTML Compatible HTML.
Je pense qu'il comprend même un exemple d'application qui génère du HTML.
Depuis la page d'accueil:
Exemples d'applications:
Correction ou génération de page. Vous pouvez corriger une page comme vous le souhaitez, modifier le DOM, ajouter des nœuds, copier des nœuds, eh bien ... vous l'appelez.
J'utiliserais htmltags pour créer du HTML.
Exemple:
var tag = new HtmlTag("span")
.Text("Hello & Goodbye")
.AddClass("important")
.Attr("title", "Greetings")
Et puis CSQuery si je veux analyser HTML
Exemple:
dom.Select("div > span")
.Eq(1)
.Text("Change the text content of the 2nd span child of each div");
Il existe, bien sûr, des bibliothèques, telles que HTML Agility Pack, qui peuvent vous aider dans ces efforts.
Si vous ne voulez vraiment pas utiliser une bibliothèque existante et que vous voulez du code simple, bas et sale, j'aime l'idée d'abstraire certains des comportements comme une réponse précédente l'a déclaré. J'aime également l'idée d'utiliser un StringBuilder sous-jacent, par opposition à une chaîne pour quelques raisons:
Si je n'ai pas besoin d'un moteur HTML massivement conçu, je construirais une interface simple et intuitive
AddLineBreak();
AddSimpleTag(string tagName);
AddSimpleTagAt(string tagName, string content, int index);
Output();
Si vous finissez par n'utiliser que des chaînes, n'oubliez pas d'échapper tous les caractères réservés HTML dans vos données de sortie.
& &
> >
< <
" "
' '
Je recommande cependant d'utiliser une classe ou une bibliothèque prenant en charge HTML au lieu de travailler directement avec des chaînes. HTMLWriter ressemble à un assez bon début.