Есть несколько связанных вопросов, но я не могу найти ответ, который работает.
Предполагается, что у меня есть следующие модели:
public class EditorViewModel
{
public Account Account {get;set;}
public string SomeSimpleStuff {get;set;}
}
public class Account
{
public string AccountName {get;set;}
public int MorePrimitivesFollow {get;set;}
}
и представление, расширяющее ViewPage<EditorViewModel>
, которое выполняет следующее:
<%= Html.TextBoxFor(model => model.Account.AccountName)%>
<%= Html.ValidationMessageFor(model => model.Account.AccountName)%>
<%= Html.TextBoxFor(model => model.SomeSimpleStuff )%>
<%= Html.ValidationMessageFor(model => model.SomeSimpleStuff )%>
и мой контроллер выглядит так:
[HttpPost]
public virtual ActionResult Edit(EditorViewModel account)
{ /*...*/ }
Как я могу заставить DefaultModelBinder правильно связать мою EditorViewModel? Не делая ничего особенного, я получаю пустой экземпляр моего EditorViewModel со всеми значениями null или по умолчанию.
Самое близкое, что я получил, это позвонив UpdateModel
вручную:
[HttpPost]
public virtual ActionResult Edit(EditorViewModel account)
{
account.Account = new Account();
UpdateModel(account.Account, "Account");
// this kills me:
UpdateModel(account);
Это успешно обновляет модель свойств моей учетной записи, но когда я вызываю UpdateModel на account
(чтобы получить остальные открытые свойства моей EditorViewModel), я получаю совершенно бесполезное «Модель типа ... не может быть обновлена» «. Внутренних исключений нет, поэтому я не могу понять, что происходит.
Что мне с этим делать?