首页 > 解决方案 > 如何在 asp.net 核心中将 DataAnnotations 从模型传输到 viewModel?

问题描述

在我的 ASP.NET Core 项目中,如何将 DataAnnotation 属性从 Subject 传输到 SubjectViewModel 而不复制它们?

public class Subject
{
    public int Id { get; set; }

    [Required(ErrorMessage = "Name is Required")]
    [MaxLength(200, ErrorMessage = "Name MaxLength is 200")]
    public string Name { get; set; }

    public string Description { get; set; }
}

public class SubjectViewModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}

标签: c#asp.net-coredata-annotations

解决方案


你没有。

视图模型和视图模型的注解是不同的。

对于视图模型,您需要处理视图数据注释的属性,而在底层模型中,您需要处理持久层的属性,通常与实体框架相关。

请注意,EF 需要该MaxLength属性,而 ASP.NET Core MVC 需要该StringLength属性。

[Table("Subjects")]
public class Subject
{
    [Key]
    public int Id { get; set; }

    [Required]
    [MaxLength(200]
    public string Name { get; set; }

    public string Description { get; set; }

    [NotMapped]
    public string Foo { get; set; }
}

public class SubjectViewModel
{
    public int Id { get; set; }

    [Display(Name = "Full name")]
    [Required(ErrorMessage = "Name is required")]
    [StringLength(200, ErrorMessage = "Name MaxLength is 200")]
    public string Name { get; set; }

    [AllowHtml]
    [DataType(DataType.Multiline)]
    public string Description { get; set; }
}

推荐阅读