`TagBuilder` 是 MVC 內建的 HTML 標籤構建器,封裝屬性合併、CSS 類別、Id 生成等邏輯,讓自訂 `HtmlHelper` 更健壯、符合標準。
public static string Label(this HtmlHelper helper, string name, string value)
{
return string.Format("<label for='{0}'>{1}</label><br/>", name, value);
}
用法:`@Html.Label("Anytao", "tao")` → `
`
@Html.Label("Anytao", "tao", new { @class = "grey" })
// 預期:<label class="grey" for="Anytao">tao</label>
public static string Label(this HtmlHelper helper, string name, string value, object htmlAttributes)
{
var tb = new TagBuilder("label")
{
InnerHtml = value
};
tb.MergeAttribute("for", name);
tb.MergeAttributes(new RouteValueDictionary(htmlAttributes));
return tb.ToString(TagRenderMode.Normal);
}
| 方法/屬性 | 用途 |
|---|---|
| MergeAttribute(name, value) | 合併單一屬性,自動處理重複 |
| MergeAttributes(IDictionary) | 批量合併(匿名物件 → RouteValueDictionary) |
| AddCssClass(className) | 智慧追加 class,避免重複 |
| GenerateId(name) | 依名稱生成唯一 id,自動替換無效字元 |
| SetInnerText(text) | HTML 編碼後設為內文 |
| InnerHtml | 直接設定內部 HTML(不編碼) |
| ToString(TagRenderMode) | 輸出:Normal/StartTag/EndTag/SelfClosing |
如同 `StringBuilder` 之於字串處理,`TagBuilder` 是構建 HTML 標籤的標準工具,自訂 Helper 必學。