我有一个详细信息页面,可以让我编辑与特定项目相关的信息。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