Это обычно - хорошая практика, чтобы иметь и модели представления и редактирования для приложения MVC? Значение, я не хотел бы атрибутов проверки на модели представления, так как это в основном только для чтения.
В ViewModel может быть свойство ReadOnly (boolean). На основе этого свойства можно отобразить соответствующее представление.
, вы можете использовать свою модель для редактирования. Вы привязываете редактируемые атрибуты к представлению, а остальные остаются такими же, даже если кто-то подделывал ввод.
public ActionResult Update([Bind(Include=”First, Last”)]User user)
Это гарантирует, что вы получите только поля First и Last named.
Возможно, вы пропустили это, но не отображаете редактируемые входные данные для нередактируемых атрибутов модели.
Если ваши представления являются представлениями CRUD, имеет смысл использовать одну и ту же модель представления. В представлении только для чтения атрибуты проверки будут игнорироваться, поскольку вы не вводите форму. Как только вы откажетесь от CRUD, у вас будет гораздо больше вариантов структурирования виртуальных машин. У меня есть ситуации, когда поле можно установить только во время вставки. В этом случае я использую одну и ту же виртуальную машину для рендеринга экранов добавления, только для чтения и обновления (с DisplayFor и InputFor в самом представлении html), но у меня разные модели ввода в методах действий Insert и Update.
Обычно я создаю новую модель представления для каждого представления. Я считаю, что повторное использование ViewModels на практике очень низкое, и попытка сделать их универсальными не работает и приводит к некоторым странным случаям.
Когда я впервые начал создавать ViewModels, я создавал эти действительно абстрактные ViewModels, в которые я пытался применить кучу бизнес-логики, но затем я понял, что в большинстве случаев данные, которые я пытался показать в каждом случае, были полностью разные и повторное использование не работает. Поэтому я просто начал разбивать свои ViewModels на очень мелкие части, которые используются один раз. Пока это работает хорошо.
Большую часть своей бизнес-логики я теперь стараюсь сохранить в модели, а не в модели представления. В моем случае моя модель представляет собой модель структуры сущностей, и я помещаю бизнес-логику в частичные классы, свисающие с моих объектов БД.
Я думаю, что вы неправильно понимаете цель разделения представления и модели в паттерне управления моделью и представлением.
Представление - это определение того, как пользователь будет видеть данные, т.е. как будет выглядеть веб-страница.
Модель определяет данные, которые будут использоваться, т.е. содержимое, которое будет отображаться в представлении.
Если вы решите, что вам нужны две разные веб-страницы для просмотра данных и редактирования данных, то в соответствии с паттерном MVC эти две страницы должны иметь отдельные модели и представления.
Но я вообще против разделения просмотра и редактирования данных на две веб-страницы. Сегодня с ajax я бы просто сделал это на одной веб-странице.