2009-09-28 65 views
4

我有一個用於我的ASP.NET MVC應用程序的Html Helper文件。他們大多數人只是返回一個格式化的字符串。ASP.NET MVC中的string.Format和TagBuilder之間有什麼區別?

這裏是我的格式化字符串的一個助手的例子:

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(),有的使用可互換。

標籤標籤相當簡單,那麼只是返回一個格式化的字符串,而不是像這樣的標籤實例化TagBuilder類會更好嗎?

我不一定擔心表現,我只是好奇爲什麼有些人選擇TagBuilder和其他人使用格式化的字符串。

感謝您的啓示!

回答

6

使用TagBuilder將允許您合併標籤上的屬性。例如,使用的String.Format,如果你要有條件地對標籤的CSS類的屬性,你需要做的是這樣:

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

而與TagBuilder,你可以使用MergeAttributes()傳在鍵/值的字典中。彈出打開Reflector(或獲取源代碼)並查看System.Web.Mvc.Html.InputHelper(),以瞭解使用具有大量條件屬性的構建器的強大功能。

兩者都可以產生相同的輸出,但這取決於您想要達到的目標。這也取決於你認爲哪些是「更清潔」的代碼。

+0

非常好的一點。我想我可以'混合'我的幫手文件,使簡單的一個格式化字符串和更復雜的TagBuilders。 – Anders 2009-09-28 15:35:57

+0

...還有'AddCssClass'用於定義多個CSS類。 – 2012-02-02 06:46:03

2

Tagbuilder是一個便利的類。它存儲標籤屬性的字典,然後一次輸出HTML。您也不必處理附加尖括號。它基本上和你的代碼做同樣的事情,如果你只有一個屬性,你的方式可能會很方便。

Tagbuilder由HTML Helpers在內部使用。

+0

好吧謝謝! – Anders 2009-09-28 15:34:53

相關問題