Как вы вызываете UpdateModel, когда вы используете класс ViewModel? - PullRequest
2 голосов
/ 18 июня 2011

В MVC3 кажется, что способ отображения свойств модели в вашем представлении по умолчанию выглядит так:

@Html.DisplayFor(model => model.Title)

Это прекрасно работает, если ваша модель точно соответствует вашему объекту. Но если вы определяете пользовательскую 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);
  }
}

Тогда ваш код DisplayFor будет выглядеть так:

@Html.DisplayFor(model => model.Dinner.Title)

Это означает, что имена элементов формы Dinner.Title вместо просто Title, поэтому, если вы вызовете UpdateModel в своем коде действия, MVC не "увидит" свойства, которые ему нужны для обновления вашего Dinner класс.

Есть ли стандартный способ работы с ViewModels, который я пропускаю для этого сценария в MVC3?

1 Ответ

5 голосов
/ 18 июня 2011

Используйте параметр 'prefix' для метода UpdateModel

UpdateModel (модель. Ужин "Ужин");

и если вам нужно обновить только указанные свойства - используйте что-то вроде этого

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...