2016-12-05 2 views
1

У меня есть model, которая содержит основную информацию. Однако для моего View требуется дополнительная информация только для отображения, поэтому я думаю, что здесь требуется ViewModel, чтобы отобразить эту дополнительную информацию. Однако, следует ли добавить Validation attributes в модель, чтобы при выполнении Code-First migration оно автоматически создало для меня database с правильным datatype каждого столбца или я должен добавить Validation attributes в ViewModel, так как форма должна validate заполненная информация?Проверка ASP.NET MVC в модели ViewModel или модели?

public class Module 
{ 
    [Key] 
    public int id { get; set; } 

    [Required] 
    [StringLength(100)] 
    [Column(TypeName = "varchar")] 
    [Display(Name="Module Name")] 
    public string ModuleName { get; set; } 
} 


public class ModuleViewModel 
{ 
    [Key] 
    public int id { get; set; } 

    [Required] 
    [StringLength(30)] 
    [Column(TypeName="varchar")] 
    [Display(Name="Module ID")] 
    public string ModuleID { get; set; } 

    [Required] 
    [StringLength(100)] 
    [Column(TypeName = "varchar")] 
    [Display(Name="Module Name")] 
    public string ModuleName { get; set; } 

    //To populate dropdownlist 
    public List<SelectListItem> ModuleLevelList { get; set; } 

} 

Действительно ли мне нужен ViewModel?

+0

Я предполагаю, что это оба пути ... –

+0

Класс 'Module' - это ваш класс сущности, для него не имеет смысла вставлять валидацию, вы можете использовать viewmodel для проверки и другие материалы для отображения на странице просмотра. В этом случае вам нужно будет сопоставьте классы объектов с классами viewmodel. –

+0

Обратите внимание, что тег model-view-controller предназначен для вопросов о шаблоне. Существует определенный тег для реализации ASP.NET-MVC. –

ответ

0

Настоятельно рекомендуем использовать модель обзора. Вы можете подумать, что сейчас это избыточно, но я гарантирую вам, что это очень полезно, и по дороге вы поблагодарите меня. Я был сожжен много раз в прошлом, пытаясь просто использовать модельный объект повсюду и в значительной степени полагаться на аннотации данных, как и вы. Кроме того, вы не должны засорять свой модельный слой вид слоя мусора, такие как [Display (Name = «Module Name»)]

В вашем случае, я предлагаю следующее:

public class Module 
{ 
[Key] 
public int id { get; set; } 

[Required] 
[StringLength(100)] 
[Column(TypeName = "varchar")] 
public string ModuleName { get; set; } 
} 


public class ModuleViewModel 
{ 
public int id { get; set; } 

[Required] 
[StringLength(30)] 
[Display(Name="Module ID")] 
public string ModuleID { get; set; } 

[Required] 
[StringLength(100)] 
[Display(Name="Module Name")] 
public string ModuleName { get; set; } 

//To populate dropdownlist 
public List<SelectListItem> ModuleLevelList { get; set; } 

} 
1

Атрибуты аннотации данных для проверки ввода пользователя идут в ViewModel. Аннотации данных для кода платформы Entity Сначала перейдите к модели.

Они концептуально две разные вещи, валидация ввода и генерация базы данных с использованием EF Code First.

Например, Required и StringLength для Entity Framework Code Сначала создается столбец базы данных типа varchar (length) NOT NULL. Обязательные и StringLength в ViewModel используются для проверки ввода пользователя. Не связывайте их, нет ничего плохого в использовании StringLength (длина) дважды. Поместите значение длины в статическую константу, если вы хотите, чтобы длина выражалась только в одном месте.

+1

Спасибо за ваши отзывы, а ~ ~! – Pow4Pow5