Я думаю, у вас есть базовое недопонимание модели MVC.
То, что вы описываете, десериализацию экземпляра и хранение на стороне клиента, - это способ работы в Web Forms. Экземпляры сериализуются в ViewState, и когда страница отправляется обратно, данные экземпляра повторно гидрируются с использованием ViewSource.
Примерно так:
public AnimalInfo animalInfo
{
get
{
return ViewState("AnimalInfo")
}
set (AnimalInfo value)
{
ViewState("AnimalInfo") = value
}
}
В данном случае (в мире веб-форм) экземпляр сериализуется в ViewState в set
и десериализуется из ViewState в get
.
Этот механизм не существует в MVC.
Во-первых, нет механизма ViewState. Это на самом деле одно из главных преимуществ MVC, поскольку в результате получается страница, которая весит намного меньше, чем страница веб-форм. Это в основном из-за размера ViewState. И всем нужна более легкая страница:)
Во-вторых, концепция PostBack также не существует в MVC. Как только страница отправлена клиенту, вот и все.
Что делает MVC - использует оригинальные веб-методы POST
и GET
.
Передача информации осуществляется одним из двух способов: через строку запроса (GET
) или через форму (POST
).
Все это, как говорится, вот несколько способов MVC делать то, что вы хотите.
Если это форма редактирования / обновления, вы можете использовать Html.EditorForModel. Это создаст поле формы для каждого свойства вашей ViewModel. Мало того, что он это сделает, но если вы правильно подключите свой контроллер ([HttpPost] public PartialViewResult DoSomething(AnimalInfo animalInfo)
), MVC будет сканировать форму POST и восстановит для вас экземпляр по значениям поля формы и назначит новый экземпляр переменной animalInfo
.
Если это не форма редактирования / обновления, то зачем вам контроллер для регидратации экземпляра?
Существуют также способы увлажнения только определенных свойств экземпляра, как предложено @HiTeddy (@Html.TextBoxFor(o => Model.Name);)
. Это потребует некоторой дополнительной проводки на контроллере, чтобы сообщить ему, откуда извлекать значения свойств.