ASP.NET MVC 提供豐富的 HtmlHelper 產生表單元素,並內建 UpdateModel/TryUpdateModel 進行模型繫結。本文以部落格基本設定頁面為例,示範表單建立、驗證訊息顯示與 Controller 繫結邏輯。
<p>
<label for="Name">Blog 名稱</label>
<%= Html.TextBox("Name") %>
<%= Html.ValidationMessage("Name") %>
</p>
<p>
<label for="Description">簡介</label>
<%= Html.TextArea("Description") %>
<%= Html.ValidationMessage("Description") %>
</p>
<p>
<label for="PostsPerPage">每頁筆數</label>
<%= Html.TextBox("PostsPerPage") %>
<%= Html.ValidationMessage("PostsPerPage") %>
</p>
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Setting(FormCollection form)
{
var settings = BlogSettings.Instance;
// 方式一:UpdateModel 直接繫結現有實例(失敗拋例外)
// UpdateModel(settings, form.ToValueProvider());
// 方式二:TryUpdateModel 回傳 bool,不拋例外(推薦)
if (TryUpdateModel(settings, form.ToValueProvider()))
{
settings.Save(); // 儲存設定
TempData["Message"] = "設定已更新";
return RedirectToAction("Setting");
}
return View(settings);
}
<%= Html.ActionLink("首頁", "Index", "Home") %>
<!-- 輸出:首頁 -->
產生的 URL 受 Global.asax 路由註冊順序影響,先符合者優先。
可利用 C# 3.0 擴充方法擴充 HtmlHelper:
public static class HtmlExtensions
{
public static string MyCustomHelper(this HtmlHelper helper, string text)
{
return $"{text}";
}
}
善用 HtmlHelper 減少手寫 HTML,配合 TryUpdateModel 安全繫結並處理驗證失敗情境,是 MVC 表單處理的標準模式。