[MVC]TryUpdateModel

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,在某些情況還可以讓程式碼更好看。

 

 

一天一分享,身體好健康。

該追究的不是過去的原因,而是現在的目的。