4

ASP.NETMVCアプリケーション用のHtmlヘルパーファイルがあります。それらの大部分は、単にフォーマットされた文字列を返します。

これが私のフォーマットされた文字列ヘルパーの1つの例です:

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

上記と同じ結果が得られるTagBuilderバージョンは次のとおりです。

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

さて、私が読んでいる/MVCについて学んでいるいくつかのサイトは、実装の取り違えからです。TagBuilderメソッドを使用するものもあればstring.Format()、を使用するものもあり、両方を同じ意味で使用するものもあります。

TagBuilderlabelタグはかなり単純なので、このようなタグのクラスをインスタンス化するよりも、フォーマットされた文字列を返す方が「良い」でしょうか。

私は必ずしもパフォーマンスについて心配しているわけではありません。TagBuilderを選択する理由とフォーマットされた文字列を使用する理由について知りたいだけです。

悟りをありがとう!

4

3 に答える 3

6

TagBuilderを使用すると、タグの属性をマージできます。たとえば、String.Formatを使用して、タグにCSS Class属性を条件付きで設定する場合は、次のようにする必要があります。

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

一方、TagBuilderでは、キー/値のディクショナリを渡すMergeAttributes()を使用できます。Reflectorを開いて(またはソースを取得して)、System.Web.Mvc.Html.InputHelper()を調べて、多くの条件付き属性を持つビルダーを使用することの威力を理解してください。

どちらも同じ出力になる可能性がありますが、実際には何を達成しようとしているかによって異なります。また、どちらを「よりクリーンな」コードと見なすかによっても異なります。

于 2009-09-28T14:51:29.083 に答える
2

Tagbuilderは便利なクラスです。タグ属性の辞書を保存し、HTMLを一度に出力します。また、山かっこを追加する必要はありません。それは基本的にあなたのコードがそうしているのと同じことをします、もしあなたがただ一つの属性を持っているなら、あなたのやり方は同じように便利かもしれません。

Tagbuilderは、HTMLヘルパーによって内部的に使用されます。

于 2009-09-28T14:42:47.757 に答える
0

TagBuilderは、属性値のHTMLエンコードを処理します。SetInnerText()はエンコードしますが、.InnerHTMLはエンコードしません。また、文字列の代わりにTagBuilderを返すと、フローの後半でCSSクラスまたは属性を簡単に追加できます。

StringBuilderの代わりにTagBuilderを使用するのはなぜですか?

于 2012-04-03T04:39:34.033 に答える