ASP.NET MVC Preview 5 引入 IModelBinder 但使用繁瑣,Beta 版透過 DefaultModelBinder 實現複雜類型自動繫結,開發者無需手寫繫結器即可直接在 Action 參數使用實體類別。
IModelBinder 實作Global.asax 註冊 ModelBinders.Binders.Addpublic class SimpleArticle
{
public int ID { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public DateTime PublishDate { get; set; }
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(SimpleArticle article)
{
if (ModelState.IsValid)
{
repository.Save(article);
return RedirectToAction("Index");
}
return View(article);
}
<form method="post">
<input name="Title" />
<input name="Content" />
<input name="PublishDate" />
</form>
欄位名稱與屬性名稱一致,DefaultModelBinder 自動映射、轉型、驗證。
public ActionResult Create([Bind(Include="Title,Content")] SimpleArticle article)
{
// 僅繫結 Title、Content,PublishDate 忽略(安全性:防止過度張貼)
}
MvcDemo/ ├── Controllers/ │ └── ArticleController.cs ├── Models/ │ └── SimpleArticle.cs ├── Views/ │ └── Article/ │ ├── Create.aspx │ └── Index.aspx └── Global.asax.cs // 註冊路由
IModelBinder,改用 DefaultModelBinder 慣例IModelBinder 註冊覆蓋BindAttribute 實現白名單機制,防止大量指派攻擊