Frage

Ich habe einen HTML-Helper für meine ASP.NET MVC-Anwendung einreichen. Die meisten von ihnen einfach einen formatierten String zurück.

Hier

ist ein Beispiel für eine meiner formatierten String Helfer:

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

Hier ist eine TagBuilder Version, die mir das gleiche Ergebnis wie oben ergibt:

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);
}

Nun, ein paar Seiten, die ich habe gelesen / Lernen über MVC aus mix up-Implementierungen. Einige nutzen die TagBuilder Methode, andere verwenden string.Format(), und einige verwenden sowohl austauschbar.

Der Label-Tag ist ziemlich einfach, so wäre es ‚besser‘ sein, nur eine formatierte Zeichenfolge zurück, anstatt die TagBuilder Klasse für Tags wie diese instanziiert?

ich nicht unbedingt über die Leistung besorgt bin, bin ich nur neugierig, warum einige wählen TagBuilder und andere verwenden formatiert Strings.

Danke für die Aufklärung!

War es hilfreich?

Lösung

Mit TagBuilder können Sie Attribute auf dem Tag verschmelzen. Zum Beispiel mit String.Format, wenn Sie das CSS-Klasse-Attribute auf einem Tag bedingt haben wollen, müssen Sie so etwas wie tun:

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

Während bei einem TagBuilder, können Sie MergeAttributes () Leiten in einem Wörterbuch von Schlüssel / Werte verwenden. Pop öffnet Reflektor (oder die Quelle greifen) und Blick auf der System.Web.Mvc.Html.InputHelper () eine Vorstellung von der Macht bekommen einen Builders mit vielen bedingten Attributen verwenden.

Beide können in der gleichen Ausgabe führen, aber es hängt wirklich davon ab, was Sie zu erreichen suchen. Es hängt auch davon ab, welche man bedenkt, „sauberer“ Code sein.

Andere Tipps

TagBuilder ist ein Convenience-Klasse. Es speichert ein Wörterbuch Ihrer Tagattribute, und gibt dann das HTML alle auf einmal. Sie müssen auch nicht mit Anhängen der spitzen Klammern befassen. Es tut im Wesentlichen dasselbe wie Sie Ihren Code so tut, wenn Sie nur noch ein Attribut , Ihre Art und Weise könnte genauso bequem sein.

TagBuilder wird intern von dem HTML-Helfer verwendet wird.

TagBuilder nimmt die HTML-Codierung von Attributwerten: SetInnerText () kodiert, tut .InnerHTML nicht. Auch, wenn Sie einen TagBuilder anstelle einer Zeichenfolge zurückgeben können Sie ganz einfach eine CSS-Klasse hinzuzufügen, oder später im Fluss zuzuschreiben.

Warum Verwendung TagBuilder statt String?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top