2012-01-03 1 views
1

Допустим, у меня есть точка зрения, которая принимает объект Person.Должен ли я использовать модель представления только для двух объектов?

имеет три свойства, FirstName, LastName, Age

Теперь давайте говорить, что я добавить еще одно поле текстового поля, который не является частью объекта.

Мне не нужно значение текстового поля, его просто заполнены данными, которые для пользователя.

При редактировании поля и вывесить Person к контроллеру, позволяет предположить, что существует проблема проверки, так что вы вернуть Person объект обратно с ошибками

Проблема теперь дополнительное текстовое поле потерял это значение, так как его не является частью модели.

Итак, я создал ViewModel со строковым свойством для этого поля и свойство Person, чтобы сохранить все значения. Похоже, что был бы лучший способ сохранить ценность в «специальном» текстовом поле?

ответ

2

Вы можете получить это дополнительное поле из опубликованных полей. Как вы устанавливаете его первый раз, через ViewBag? Вы должны иметь возможность установить его снова.

Но что именно не так с использованием ViewModel? Рано или поздно у вас будет 2 или 3 дополнительных поля, или Лицо и Назначение.

+0

Просто «казалось» неправильно, я думаю. Мне не нужны данные в поле для чего-либо, я просто не могу или не знаю, как заполнить это поле снова из действия post, когда проверка завершается с ошибкой, поскольку его не является частью объекта Person, я возвращаюсь обратно вид. – MisterIsaak

2

Я думаю, что это абсолютно правильный способ сделать это. Модель viewmodel - это модель для представления, а не модель для обработки не-пользовательского интерфейса, она содержит личность и дополнительную видимую информацию. Это точно соответствует концепции. Ваше лицо, по-видимому, является моделью (неотображением), и поэтому, когда у вас есть действующая почта, вы получаете Личность, чтобы сохранить ее данные (или что-то еще), а дополнительная информация, доступная для просмотра, не имеет значения в этой точке, потому что вы больше не находитесь в часть «Просмотр/UI» вашего приложения. сделать вид сильно типизированных к вашему ViewModel и получить доступ к Person в нем

@model myViewModel 

@Model.Person.FirstName 
@Model.OtherViewOnlyValue 

Go с ViewModel, так гораздо чище, чем ViewBags/Session/ViewData т.д.

1

Есть много раз, что вы могли бы подумать что вам не нужно включать отображение пользовательского интерфейса в ViewModel, но большую часть времени вы добавите отображение в ViewModel. Я считаю, что ViewModel должен представлять все на вашем экране пользовательского интерфейса. Поскольку HTTP не имеет статуса, значения post form будут играть важную роль при заполнении элементов управления пользовательским интерфейсом.