在MVC3中,似乎在视图中显示模型属性的默认方式是这样的:
@Html.DisplayFor(model => model.Title)
如果您的模型与您的对象完全匹配,则此工作正常。但是,如果您定义自定义ViewModel,例如NerdDinner tutorial
public class DinnerFormViewModel {
// Properties
public Dinner Dinner { get; private set; }
public SelectList Countries { get; private set; }
// Constructor
public DinnerFormViewModel(Dinner dinner) {
Dinner = dinner;
Countries = new SelectList(PhoneValidator.AllCountries, dinner.Country);
}
}
然后你的DisplayFor代码看起来像:
@Html.DisplayFor(model => model.Dinner.Title)
这意味着表单项的名称为Dinner.Title
而不仅仅是Title
,因此如果您在Action代码中调用UpdateModel
,MVC将不会“看到”属性需要查看更新您的Dinner
课程。
在MVC3中,是否有一种处理ViewModel的标准方法我忽略了这个场景?
答案 0 :(得分:5)
对UpdateModel方法使用'prefix'参数
UpdateModel(model.Dinner,“Dinner”);
如果您只需要更新指定的属性 - 请使用类似这样的内容
UpdateModel(model.Dinner,“Dinner”,new [] {“Title”});