承接前文,我們已完成 HtmlFieldSet 核心類別的建構。為了讓 HtmlHelper 擴充方法能順暢使用這個類別,還需實作一個關鍵的進入點方法:NewHtmlFieldSet。
public static IViewObject NewHtmlFieldSet(
this HtmlHelper htmlHelper,
string name,
string title,
object attributes)
{
IViewObject viewObject = new HtmlFieldSet(
new ViewRequestContext(htmlHelper),
name,
title,
attributes);
viewObject.StartView();
return viewObject;
}
此方法的實作邏輯與前幾篇介紹的其他 Helper 一致:接收參數、建構 View 物件、呼叫 StartView() 初始化,最後回傳實作 IViewObject 介面的實例。回傳的物件將在 View 的 using 區塊中被自動管理生命週期。
<% using (Html.NewHtmlFieldset("FieldsetName", "My Fieldset", null)) { %>
<li>
<label for="FirstName">FirstName</label>
<span id="FirstName"><%= Html.Encode(Model.FirstName) %></span>
</li>
<% } %>
<fieldset name="FieldsetName">
<legend>My Fieldset</legend>
<ol>
<li>
<label for="FirstName">FirstName</label>
<span id="FirstName">Sayed</span>
</li>
</ol>
</fieldset>
EndView 方法會自動輸出結尾標籤(</li>、</ol>、</fieldset>),完美符合預期。透過這套 View Helper 機制,我們不僅封裝了重複的 HTML 結構,更讓 View 程式碼獲得了更好的可讀性與可維護性。這系列文章完整展示了從零建構自訂 ViewHelper 的完整流程,期望能為您的 ASP.NET MVC 專案帶來啟發。