首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET MVC HtmlHelper 擴展:善用 TagBuilder 豐富自訂助手

     編輯:關於ASP.NET

`TagBuilder` 是 MVC 內建的 HTML 標籤構建器,封裝屬性合併、CSS 類別、Id 生成等邏輯,讓自訂 `HtmlHelper` 更健壯、符合標準。

基本擴展:Label

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 屬性(如 class、id、data-*)

@Html.Label("Anytao", "tao", new { @class = "grey" })
// 預期:<label class="grey" for="Anytao">tao</label>

使用 TagBuilder 重構

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

TagBuilder 核心功能

方法/屬性用途
MergeAttribute(name, value)合併單一屬性,自動處理重複
MergeAttributes(IDictionary)批量合併(匿名物件 → RouteValueDictionary)
AddCssClass(className)智慧追加 class,避免重複
GenerateId(name)依名稱生成唯一 id,自動替換無效字元
SetInnerText(text)HTML 編碼後設為內文
InnerHtml直接設定內部 HTML(不編碼)
ToString(TagRenderMode)輸出:Normal/StartTag/EndTag/SelfClosing

為什麼不用 StringBuilder 手拼?

  • 屬性值需 HTML 編碼(`MergeAttribute` 自動處理)。
  • 布林屬性渲染(`checked="checked"` vs `checked`)。
  • Id 合法化(移除 `.`、`[`、`]` 等)。
  • 程式碼可讀性、可維護性大幅提升。

如同 `StringBuilder` 之於字串處理,`TagBuilder` 是構建 HTML 標籤的標準工具,自訂 Helper 必學。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved