В чем разница между Model и ViewModel в ядре asp.net mvc?
У меня есть класс Account для моделей аккаунтов.
public class Account
{
[Key]
public Int64 UID { get; set; }
[Required]
public string ID { get; set; }
[Required]
public string PassWord { get; set; }
[Required]
public string UserName { get; set; }
}
Мой проект не является первым проектом кода, и это модельный класс для базы данных "Учетная запись".
Но я использую только два свойства в представлении входа в систему, идентификатор строки и строку PassWord. Поэтому я не могу использовать ModelState.Isvalid() в контроллере входа в систему, когда я проверяю валидацию модели, потому что я использую только два свойства...
Тогда я искал об этом, теперь я нашел о ViewModel, который является классом модели для представления.
Затем я создал новый класс AccountViewModel, а затем сопоставил его с представлением вместо модели "Account".
Мой путь был правильным? Я понял, что ViewModel - это класс модели только для View. И модель класса для всех. (как глобальное значение... для БД, просмотра и т. д.)
Чем отличается модель от класса ViewModel? Могу ли я получить хороший способ решить эту проблему?
1 ответ
Как видно из названия, модель представления очень специфична для представления. Это будет простой POCO с только теми свойствами, которые необходимы для представления.
Ваш другой класс моделей - это ваши модели сущностей. Поэтому, если вы используете первый подход к коду EF, вам нужны определения классов сущностей, из которых EF будет генерировать таблицы базы данных. Таким образом, в основном эти классы сущностей очень похожи на структуру вашей схемы БД.
Создавая модель представления, вы удаляете сильную связь ваших классов сущностей со слоем пользовательского интерфейса. Теперь ваш уровень пользовательского интерфейса не зависит от ваших классов сущностей, и если вы когда-нибудь решите изменить код доступа к данным с EF на что-то другое, вам вообще не нужно трогать представления. Вам просто нужно обновить часть отображения (из представления модель для объектов доступа к данным / уровня обслуживания)
Иногда представления моделей очень похожи на модели вашей сущности, особенно если ваша модель сущности представляет собой простую таблицу / класс.
В вашем случае, поскольку ваше представление передает идентификатор пользователя и пароль, вам нужна простая модель представления, которая имеет только эти 2 свойства. Когда пользователь отправляет форму, вы можете прочитать значения и использовать ее для создания объекта класса сущности домена по мере необходимости.
public class LoginViewModel
{
public string UserId { set;get;}
public string Password { set;get; }
}
Вы можете использовать аннотации данных с моделями представления. Модель валидации MVC создает эти аннотации данных для проверки. Например, поскольку пользователь должен ввести идентификатор пользователя и пароль, вы можете украсить их соответствующими аннотациями.
public class LoginViewModel
{
[Required]
public string UserId { set;get;}
[Required]
public string Password { set;get; }
}
[Key]
Атрибут более полезен, когда вы определяете класс сущности. Так что я не думаю, что это необходимо для модели представления. Помните, что модель представления больше похожа на пользовательский интерфейс. Он вообще не имеет представления о вашем основном механизме хранения данных.
Некоторые из наиболее часто используемых атрибутов со свойствами модели представления