Pourquoi utiliser TagBuilder au lieu de StringBuilder?
quelle est la différence entre l'utilisation de balise constructeur et le générateur de chaîne pour créer une table dans une classe htmlhelper, ou à l'aide de la HtmlTable?
ne sont-ils pas générer la même chose??
Vous devez vous connecter pour publier un commentaire.
TagBuilder
est une classe spécialement conçu pour la création des balises html et de leur contenu. Vous avez raison de dire que le résultat sera de toute façon une chaîne de caractères et bien sûr, vous pouvez toujours utiliserStringBuilder
et le résultat sera le même, mais vous pouvez faire des choses plus facile avecTagBuilder
. Disons que vous avez besoin de générer une balise:À l'aide de
StringBuilder
vous avez besoin d'écrire quelque chose comme ceci:Il n'est pas très cool, n'est-ce pas?
Et de comparer la façon dont vous pouvez générer à l'aide
TagBuilder
;N'est-ce pas mieux?
sb.AppendFormat("<a href='{0}' class = '{1}'/>", link, cssClass);
mais les méthodes sur TagBuilder sont vraiment bien si l'un des besoins les plus complexes des balises.C'est juste de la commodité. De ce tutoriel:
Regarder les méthodes sur TagBuilder, et pensez qu'ils vous donnent de la valeur. voudriez-vous faire la même chose vous-même manuellement dans
StringBuilder
à chaque fois? Est-il échapper qu'il fait pour vous? Attribut de la fusion, etc? Est le code plus facile à lire, de la rendre plus claire que vous êtes la construction d'une balise plutôt que d'une chaîne de caractères arbitraire?HtmlHelpers
Il y a un point que les autres réponses ont manqué jusqu'à présent. Si vous retournez
TagBuilder
à partir d'une méthode d'extension vous pouvez continuer à ajouter des attributs dans votre point de vue. Disons que vous étiez de retour d'une table à partir d'un helper Html et vous souhaitez ajouter un attribut de classe. Si vous utilisez unStringBuilder
vous avez besoin pour passer à la classe en tant que paramètre.Mais l'ajout d'un attribut de classe à une balise HTML est pas la préoccupation d'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 ajouter l'attribut de classe en dehors de la table de la méthode.
En plus de TagBuilder, vous pourriez vouloir vérifier FubuMVC de HtmlTags de la bibliothèque. C'est un bien meilleur modèle pour la génération de code HTML. J'ai quelques plus de détails sur le blog.
Bien, c'est sûr, mais ça ne devrait pas être un moyen de dissuasion, devrait-il? Une classe est conçue pour quelque chose de plus spécifique que les autres, de sorte qu'il offre un plus grand niveau de confort.
Je pourrais poser la question: pourquoi utiliser un
StringBuilder
? Pourquoi pas unList<char>
? Je n'ai pas pu produire la même chose que ce soit?Pour aller plus loin: pourquoi même un
List<char>
? Pourquoi ne pas simplement unechar[]
, le redimensionnement et la manipulation de qui je peux me contrôler? Je peux encore tout à fait créer unstring
à partir d'unchar[]
.En fait, tout ce que je vraiment besoin est une
char*
et unint
(pour la longueur). Droit?Mon point est simplement que si une classe est disponible pour des fonctionnalités spécifiques que vous pouvez utiliser, il est logique de l'utiliser si vous me demandez.
Comme il est mentionné dans les autres postes, TagBuilder apporte une certaine commodité.
Mais vous devez considérer que TagBuilder et StringBuilder peut ne pas produire le même résultat. TagBuilder s'applique le codage html, mais StringBuilder ne l'est pas. De sorte qu'il est plus sûr d'utiliser TagBuilder à surmonter vulnerabilies qui peut être exploitée via une attaque XSS.
N'oubliez pas de faire le codage HTML de valeurs si vous utilisez StringBuilder. J'espère TagBuilder faire cela automatiquement.