繁体   English   中英

ViewModel或Model中的ASP.NET MVC验证?

[英]ASP.NET MVC Validation in ViewModel or Model?

我有一个包含基本信息的model 但是,我的View需要更多信息才能显示,所以我认为这里需要一个ViewModel来显示额外的信息。 但是,我应该在模型中添加Validation attributes ,以便在执行Code-First migration ,它会自动为我创建具有每列正确datatypedatabase ,或者我应该将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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM