关于.net:如何在-C-中使用-数据注解

5次阅读

共计 3737 个字符,预计需要花费 10 分钟才能阅读完成。

数据注解 是一种能够利用到 类 或者 类成员上用来指定类之间关系的一种 Attribute,它的利用场景比拟多,可用来形容 UI 上如何进行数据展现,还能够用来做类属性的规定验证,这篇文章就来探讨为什么 注解 值得你去学习,以及如何在 .NET Core 中应用。

应用 System.ComponentModel.DataAnnotations

要想运行本篇的例子,须要将 System.ComponentModel.DataAnnotations 援用到我的项目中。

值得注意的是,Attribute 罕用来给 class 或者 property 标注元数据信息,很显然 注解 Atrribute 也是 Attribute 的一种,它的分类大略有以下几种。

  • Validation attribute

从名字上就能看出,次要用在 实体属性上,目标是用来管控 属性值 的有效性。

  • Display attribute

用来指定数据如何在 UI 上展现。

  • Modeling attribute

用来指定类之间的关系。

了解 数据注解 类

System.ComponentModel.Annotations 命名空间下有如下几个注解类。

  • ConcurrencyCheck
  • Key
  • MaxLength
  • Required
  • StringLength
  • Timestamp

数据注解 案例展现

当初新建一个 Author 类,代码如下:


    public class Author
    {[Required(ErrorMessage = "{0} is required")]
        [StringLength(50, MinimumLength = 3,
        ErrorMessage = "First Name should be minimum 3 characters and a maximum of 50 characters")]
        [DataType(DataType.Text)]
        public string FirstName {get; set;}
        [Required(ErrorMessage = "{0} is required")]
        [StringLength(50, MinimumLength = 3,
        ErrorMessage = "Last Name should be minimum 3 characters and a maximum of 50 characters")]
        [DataType(DataType.Text)]
        public string LastName {get; set;}
        [DataType(DataType.PhoneNumber)]
        [Phone]
        public string PhoneNumber {get; set;}
        [DataType(DataType.EmailAddress)]
        [EmailAddress]
        public string Email {get; set;}
    }

上面的代码片段展现了如何给 Author 的属性赋值。


            Author author = new Author();
            author.FirstName = "Joydip";
            author.LastName = "";
            author.PhoneNumber = "1234567890";
            author.Email = "joydipkanjilal@yahoo.com";

接下来在 Main 办法中去验证这些属性值是否合乎验证规定。


            ValidationContext context = new ValidationContext(author, null, null);

            List<ValidationResult> validationResults = new List<ValidationResult>();
            
            bool valid = Validator.TryValidateObject(author, context, validationResults, true);
            
            if (!valid)
            {foreach (ValidationResult validationResult in validationResults)
                {Console.WriteLine("{0}", validationResult.ErrorMessage);
                }
            }

从下面代码能够看出,context 就是 验证规定的上下文,而后调用 Validator.TryValidateObject 去做规定验证,如果有属性不合乎 数据注解 的规定,错误信息都会如实的记录到 List<ValidationResult> 汇合中。

上面是残缺的可供参考的代码。


    class Program
    {static void Main(string[] args)
        {Author author = new Author();
            author.FirstName = "Joydip";
            author.LastName = "";
            author.PhoneNumber = "1234567890";
            author.Email = "joydipkanjilal@yahoo.com";


            ValidationContext context = new ValidationContext(author, null, null);

            List<ValidationResult> validationResults = new List<ValidationResult>();
            
            bool valid = Validator.TryValidateObject(author, context, validationResults, true);
            
            if (!valid)
            {foreach (ValidationResult validationResult in validationResults)
                {Console.WriteLine("{0}", validationResult.ErrorMessage);
                }
            }

            Console.ReadLine();}
    }

    public class Author
    {[Required(ErrorMessage = "{0} is required")]
        [StringLength(50, MinimumLength = 3,
        ErrorMessage = "First Name should be minimum 3 characters and a maximum of 50 characters")]

        [DataType(DataType.Text)]
        public string FirstName {get; set;}

        [Required(ErrorMessage = "{0} is required")]
        [StringLength(50, MinimumLength = 3,
        ErrorMessage = "Last Name should be minimum 3 characters and a maximum of 50 characters")]
        [DataType(DataType.Text)]
        public string LastName {get; set;}

        [DataType(DataType.PhoneNumber)]
        [Phone]
        public string PhoneNumber {get; set;}

        [DataType(DataType.EmailAddress)]
        [EmailAddress]
        public string Email {get; set;}
    }

接下来把程序跑起来,你会在 Console 中看到如下错误信息。

创立 自定义验证规定

后面都是应用零碎内置的,如果你有 自定义验证规定 的需要,那就要重写 ValidationAttribute 类中的 IsValid 办法,如下代码所示:


[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
public class IsEmptyAttribute : ValidationAttribute
 {public override bool IsValid(object value)
     {
         var inputValue = value as string;
         return !string.IsNullOrEmpty(inputValue);
     }
 }

而后将这个自定义的 IsEmptyAttribute 标记在 Author 类的 FirstName 和 LastName 属性上,如下代码所示:


[IsEmpty(ErrorMessage = "Should not be null or empty.")]
public string FirstName {get; set;}

[IsEmpty(ErrorMessage = "Should not be null or empty.")]
public string LastName {get; set;}

数据注解 最后是在 .NET 3.5 中作为 System.ComponentModel.DataAnnotations 的一部分被引入的,从那时起,它就越来越风行了,你能够间接在属性上加 数据注解 防止在我的项目各处中都有对 Author 实体类的验证逻辑,这种也太麻烦了,不是吗?

前面的文章中,我会带大家一起学习如何在 ASP.NET Core MVC 中应用 数据注解 去做 model 的验证。

译文链接:https://www.infoworld.com/art…

更多高质量干货:参见我的 GitHub: csharptranslate

正文完
 0