web-dev-qa-db-fra.com

Quelle est la meilleure façon de créer du HTML en code C #?

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.)

15
Rodney

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.

12
Daniel Little

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.

14
Jim G.

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");
5
jgauffin

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:

  1. Les chaînes sont moins efficaces que le générateur de chaînes
  2. StringBuilder est une structure de données indexable,

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();
2
Tim C

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.

&    &
>    >
<    &lt;
"    &quot;
'    &apos;

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.

1
Mike Clark