Quelle est la différence, le cas échéant, entre string.Format et TagBuilder dans ASP.NET MVC?

StackOverflow https://stackoverflow.com/questions/1487294

Question

Je fichier Helper Html pour mon application ASP.NET MVC. La majorité d'entre eux retournent simplement une chaîne formatée.

Voici un exemple d'un de mes aides de chaîne au format:

public static string Label(this HtmlHelper helper, string @for, string text)
{
    return string.Format("<label for \"{0}\">{1}</label>", @for, text);
}

Voici une version TagBuilder qui me donne le même résultat que ci-dessus:

public static string Label(this HtmlHelper helper, string @for, string text)
{
    var builder = new TagBuilder("label");
    builder.Attributes.Add("for", @for);
    builder.SetInnerText(text);
    return builder.ToString(TagRenderMode.Normal);
}

Maintenant, quelques sites que j'ai été lecture / apprentissage de MVC de mise en oeuvre de confusion. Certains utilisent la méthode de TagBuilder, d'autres utilisent string.Format(), et certains utilisent à la fois de manière interchangeable.

La balise label est assez simple, donc serait-il « mieux » pour revenir juste une chaîne formatée plutôt que instancier la classe TagBuilder pour les balises comme celui-ci?

Je ne suis pas forcément inquiet pour la performance, je suis curieux de savoir pourquoi certains choisissent TagBuilder et d'autres utilisent des chaînes formatées.

Merci pour l'illumination!

Était-ce utile?

La solution

L'utilisation TagBuilder vous permettra de fusionner les attributs de la balise. Par exemple, en utilisant String.Format, si vous voulez avoir conditionnellement l'attribut CSS de classe sur une étiquette, vous aurez besoin de faire quelque chose comme:

String.Format("<label {0}>Text</label>", (includeClass ? "class=\"Something\"" : ""));

Alors qu'avec un TagBuilder, vous pouvez utiliser MergeAttributes () en passant dans un dictionnaire de clés / valeurs. Pop réflecteur ouvert (ou saisir la source) et regardez le System.Web.Mvc.Html.InputHelper () pour avoir une idée de la puissance d'utiliser un constructeur avec beaucoup d'attributs conditionnels.

Les deux peuvent entraîner la même sortie, mais cela dépend vraiment de ce que vous cherchez à atteindre. Elle dépend aussi que vous considérez comme code « propre ».

Autres conseils

TagBuilder est une classe de commodité. Il stocke un dictionnaire de vos attributs de la balise, et délivre alors à la fois le code HTML. Vous pouvez aussi ne pas traiter avec les annexant équerres. Il fait essentiellement la même chose que votre code fait donc, si vous avez seulement un attribut , votre chemin pourrait être tout aussi pratique.

TagBuilder est utilisé en interne par les Helpers HTML.

TagBuilder gère le codage HTML des valeurs d'attribut: SetInnerText () code, .InnerHTML ne fonctionne pas. En outre, si vous retournez un TagBuilder au lieu d'une chaîne, vous pouvez facilement ajouter une classe CSS ou attribuer plus tard dans le flux.

Pourquoi utiliser TagBuilder au lieu de StringBuilder?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top