[英]ASP.NET Core MVC model validation in viewmodel with base model
[英]ASP.NET MVC Validation in ViewModel or Model?
我有一个包含基本信息的model
。 但是,我的View
需要更多信息才能显示,所以我认为这里需要一个ViewModel
来显示额外的信息。 但是,我应该在模型中添加Validation attributes
,以便在执行Code-First migration
,它会自动为我创建具有每列正确datatype
的database
,或者我应该将Validation attributes
添加到ViewModel,因为表单应该validate
填写的信息?
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
吗?
用户输入验证的数据注释属性在ViewModel上。 实体框架代码的数据注释首先进入模型。
它们在概念上是两个不同的东西,使用EF Code First验证输入和数据库生成。
例如,Entity Framework Code First的Required和StringLength创建varchar(length)NOT NULL类型的数据库列。 ViewModel上的Required和StringLength用于验证用户输入。 不要混淆两者,使用StringLength(长度)两次没有错。 如果您希望长度仅表示一个位置,请将长度值放在一个静态常量中。
我强烈建议您使用视图模型。 你可能认为它现在是多余的,但我向你保证它非常有用,你会感谢我。 过去我曾多次被烧毁,试图在任何地方使用模型对象并严重依赖像你这样的数据注释。 另外,您不必使用视图图层垃圾(例如[显示(名称=“模块名称”)]来丢弃模型图层
在你的情况下,我建议:
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; }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.