TryUpdateModel
一般MVC Binding是一種隱式的背景工作機制,也就是說MVC自動幫你跑那段Binding程式碼。 且如果Binding過程有驗證失敗 ModelState.IsValid 會等於false。 而TryUpdateModel就是把這些Binding過程移到Action的程式碼裡面,讓你可以自己手動作Binding的動作,而且一樣會回傳ModelState.IsValid。
首先一般Binding程式碼如下:
public ActionResult Edit([Bind(Include = "ID,Name")] Member member)
{
if (ModelState.IsValid)
{
db.Entry(member).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(member);
}
改使用TryUpdateModel達成一樣的效果:
public ActionResult Edit()
{
Member member = new Member();
//設定只Binding Id 跟 Name
string[] includeProperties = new[] { "Id", "Name" };
//做Binding的動作
bool isValid = TryUpdateModel<Member>(member, includeProperties);
//isValid 等同 ModelState.IsValid 的效果,因為TryUpdateModel就是回傳ModelState.IsValid
if (isValid)
{
db.Entry(member).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(member);
}
看似程式碼變多了,不過實際上彈性更多。也因為彈性更多我本身還蠻喜歡用TryUpdateModel,在某些情況還可以讓程式碼更好看。
一天一分享,身體好健康。
該追究的不是過去的原因,而是現在的目的。