使用ViewModel类时如何调用UpdateModel?

Mic*_*yor 3 asp.net-mvc-3

在MVC3中,似乎在视图中显示模型属性的默认方式如下:

@Html.DisplayFor(model => model.Title)
Run Code Online (Sandbox Code Playgroud)

如果您的模型与您的对象完全匹配,这可以正常工 但是,如果您定义自定义ViewModel,例如在NerdDinner教程中

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);
  }
}
Run Code Online (Sandbox Code Playgroud)

然后你的DisplayFor代码看起来像:

@Html.DisplayFor(model => model.Dinner.Title)
Run Code Online (Sandbox Code Playgroud)

这意味着表单项的名称Dinner.Title不是公正的Title,因此如果您调用UpdateModelAction代码,MVC将不会"看到"更新Dinner类所需的属性.

有没有一种处理ViewModel的标准方法,我在MVC3中忽略了这个场景?

Anu*_*bis 5

对UpdateModel方法使用'prefix'参数

UpdateModel(model.Dinner,"Dinner");

如果您只需要更新指定的属性 - 请使用类似的东西

UpdateModel(model.Dinner,"Dinner",new [] {"Title"});