我有一個詳細信息頁面,可以讓我編輯與特定項目相關的信息。ASP.NET MVC ViewModel更新
public ActionResult Details(int id)
{
Call call = db.Calls.Find(id);
return View(new CallFormViewModel(call));
}
我用一個視圖模型 -
public class CallFormViewModel
{
public Call Call { get; private set; }
public CallFormViewModel()
{
Call = new Call();
}
public CallFormViewModel(Call call)
{
Call = call;
}
}
當我提出,我想只允許「調用」對象的某些屬性進行更新。我的帖子處理方法是這樣的 -
[HttpPost]
public ActionResult Details(CallFormViewModel callForm)
{
(some code removed for clarity)
UpdateModel(callForm.Call ,new string[] {
"Contact",
"Summary",
"Description",
}
}
的問題是,callForm已經與所有從表單輸入的更新提交之前,我甚至打電話的UpdateModel。
我該如何改變它並使用UpdateModel來選擇性地更新字段?
感謝
編輯:
我覺得我一直在尋找這個錯誤的方式。我應該做的是:
[HttpPost]
public ActionResult Details(int id, CallFormViewModel callForm)
{
var call = db.Calls.Find(id);
(some code removed for clarity)
UpdateModel(call, "Call", new string[] {
"Contact",
"Summary",
"Description",
}
}
這樣,它採取了不完整的數據[只有田野,我想]並將其應用到實際的模型。我一直在混淆callForm.Call和實際的模型對象,事實上它只是它的一個表示。
必須等到我開始測試這個理論。
您最好使用'AutoMapper'從實體切換到ViewModel。 ViewModel應該是您使用和操作的唯一「數據」,直到您想保存\編輯,然後切換到您保存的真實實體。 AutoMapper幫助將ViewModel從實體中分離出來。希望這個技巧能夠在不久的將來幫助你很多。 – gdoron 2012-01-09 08:37:22