Pourquoi utiliser TagBuilder au lieu de SsortingngBuilder?

Quelle est la différence en utilisant un générateur de balises et un générateur de chaînes pour créer une table dans une classe htmlhelper ou en utilisant HtmlTable?

ne génèrent-ils pas la même chose?

TagBuilder est une classe spécialement conçue pour créer des balises HTML et leur contenu. Vous avez raison de dire que le résultat sera de toute façon une chaîne et bien sûr, vous pouvez toujours utiliser SsortingngBuilder et le résultat sera le même, mais vous pouvez faire les choses plus facilement avec TagBuilder . Disons que vous devez générer un tag:

  

En utilisant SsortingngBuilder vous devez écrire quelque chose comme ceci:

 var sb = new SsortingngBuilder(); sb.Append(""); sb.ToSsortingng(); 

Ce n’est pas très cool, n’est-ce pas? Et comparez comment vous pouvez le construire en utilisant TagBuilder ;

 var tb = new TagBuilder("a"); tb.MergeAtsortingbute("href",link); tb.AddCssClass(cssClass); tb.ToSsortingng(TagRenderMode.SelfClosing); 

N’est-ce pas mieux?

C’est juste la commodité. De ce tutoriel :

Vous n’avez pas vraiment besoin d’utiliser la classe TagBuilder. Vous pouvez utiliser une classe SsortingngBuilder à la place. Cependant, la classe TagBuilder vous facilite la vie.

Examinez les méthodes de TagBuilder et réfléchissez à la question de savoir si elles vous apportent de la valeur. voudriez-vous faire la même chose manuellement dans SsortingngBuilder chaque fois? Y a-t-il un échappatoire que ça fait pour vous? Fusion des atsortingbuts, etc. Le code qui en résulte est-il plus facile à lire, ce qui rend plus clair la création d’une balise plutôt que d’une chaîne quelconque?

Il y a un point que les autres réponses ont manqué jusqu’à présent. Si vous renvoyez TagBuilder partir d’une méthode d’extension, vous pouvez continuer à append des atsortingbuts dans votre vue. Supposons que vous retourniez une table à partir d’une aide HTML et que vous souhaitiez append un atsortingbut de classe. Si vous utilisez un SsortingngBuilder vous devez passer la classe en paramètre.

 public static ssortingng Table(...., ssortingng @class) { ... sb.AppendFormat("class='{0}", @class); ... } // In the view <%: Html.Table(someParams, "fancy") %> 

Mais append un atsortingbut de classe à une balise HTML ne concerne pas une méthode d’extension qui crée une table! Si nous passons à un modèle sémantique (TagBuilder) pour générer le code HTML, nous pouvons append l’atsortingbut class en dehors de la méthode table.

 public static TagBuilder Table(....) { ... return tag; } // In the view <%: Html.Table(someParams).AddCssClass("fancy") %> 

En plus de TagBuilder, vous voudrez peut-être consulter la bibliothèque HtmlTags de FubuMVC. C’est un meilleur modèle pour générer du HTML. J’ai plus de détails sur le blog.

ne génèrent-ils pas la même chose?

Bien sûr, mais cela ne devrait pas être dissuasif, n’est-ce pas? Une classe est conçue pour quelque chose de plus spécifique que l’autre, elle offre donc un niveau de commodité supérieur.

Je pourrais demander: pourquoi utiliser un SsortingngBuilder ? Pourquoi pas une List ? Ne pourrais-je pas générer la même chose à partir de l’un ou de l’autre?

Aller plus loin: pourquoi même une List ? Pourquoi pas juste un char[] , le redimensionnement / la manipulation dont je peux me contrôler? Je peux encore créer totalement une ssortingng partir d’un caractère char[] .

En fait, tout ce dont j’ai vraiment besoin est un char* et un int (pour la longueur). Droite?

Mon point est juste que si une classe est disponible pour des fonctionnalités spécialisées que vous pouvez utiliser, il est logique de l’utiliser si vous me le demandez.

Comme il est mentionné dans les autres articles, TagBuilder apporte une certaine commodité. Mais vous devriez considérer que TagBuilder et SsortingngBuilder peuvent ne pas produire le même résultat. TagBuilder applique le codage HTML, mais non SsortingngBuilder. Il est donc plus sûr d’utiliser TagBuilder pour surmonter les vulnérabilités qui pourraient être exploitées via une attaque XSS.

N’oubliez pas de faire l’encodage HTML des valeurs si vous utilisez SsortingngBuilder. J’espère que TagBuilder le fera automatiquement.