【51CTO.com快译】数据注释(System.ComponentModel.DataAnnotations命名空间的一部分)是可以运用于类或类成员的属性,以指定类之间的关系、描述数据如何在UI中显示以及指定验证规则。本文讨论数据注释、为什么数据注释很有用以及如何在.NET Core应用程序中使用它们。
若要使用本文提供的代码示例,您应该在系统中安装Visual Studio 2019。如果还没有安装,可以在此处(https://visualstudio.microsoft.com/downloads/)下载Visual Studio 2019。
在Visual Studio 2019中创建控制台应用程序项目
首先,不妨在Visual Studio中创建一个.NET Core控制台应用程序项目。假设系统中已安装Visual Studio 2019,按照下面概述的步骤在Visual Studio中创建新的.NET Core控制台应用程序项目。
- 启动Visual Studio IDE。
- 点击“创建新项目”。
- 在“创建新项目”窗口中,从显示的模板列表中选择“控制台应用程序(.NET Core)”。
- 点击下一步。
- 在接下来显示的“配置新项目”窗口中,指定新项目的名称和位置。
- 点击创建。
这将在Visual Studio 2019中创建一个新的.NET Core控制台应用程序项目。我们在本文后面将使用该项目来处理数据注释。
添加System.ComponentModel.DataAnnotations命名空间
想使用本文给出的代码示例,应该将System.ComponentModel.DataAnnotations命名空间添加到您的程序。
注意,属性用于指定类或属性的元数据。数据注释属性大致分为以下几类:
- 验证属性——用于对实体的属性实施验证规则。
- 显示属性——用于指定数据在用户界面中应如何显示。
- 建模属性——用于指定类之间存在的关系。
C#中的数据注释属性类
System.ComponentModel.Annotations命名空间包含几个属性类,它们可用于为您的实体类或数据控件定义元数据。最常用的属性包括如下:
- 并发检查
- 键
- 最大长度
- 必需
- 字符串长度
- 时间戳
C#中的数据注释示例
在前面创建的控制台应用程序中的Author.cs文件中创建以下类。
- 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";
您可以在Program.cs文件的Main方法中编写下列代码片段,以验证模型。
- ValidationContext context = new ValidationContext(author, null, null);
- List validationResults = new List();
- bool valid = Validator.TryValidateObject(author, context, validationResults, true);
- if (!valid)
- {
- foreach (ValidationResult validationResult in validationResults)
- {
- Console.WriteLine("{0}", validationResult.ErrorMessage);
- }
- }
ValidationContext这个类为您提供了进行验证所在的上下文。如果验证成功,Validator类的TryValidateObject静态方法返回true,否则返回false。它还返回ValidationResults列表,详细列出该模型未通过的所有验证。最后,我们使用foreach循环来迭代处理ValidationResults列表,在控制台窗口显示错误消息。
完整的代码片段如下所示,供您参考。
- 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; }
- }
- class Program
- {
- static void Main(string[] args)
- {
- Author author = new Author();
- author.FirstName = "Joydip";
- author.LastName = ""; //No value entered
- author.PhoneNumber = "1234567890";
- author.Email = "joydipkanjilal@yahoo.com";
- ValidationContext context = new ValidationContext
- (author, null, null);
- List validationResults = new
- List();
- bool valid = Validator.TryValidateObject
- (author, context, validationResults, true);
- if (!valid)
- {
- foreach (ValidationResult validationResult in
- validationResults)
- {
- Console.WriteLine("{0}",
- validationResult.ErrorMessage);
- }
- }
- Console.ReadKey();
- }
- }
执行程序后,应该会看到控制台窗口显示的下列错误消息:
- LastName is required
在C#中创建自定义验证属性
想创建自定义验证属性类,您应该扩展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);
- }
- }
下列代码片段表明了你如何可以使用自定义属性来装饰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; }
数据注释最初作为System. ComponentModel. DataAnnotations命名空间的一部分而引入到.NET 3.5中。此后,它已成为.NET中一种广泛使用的功能。你可以充分利用数据注释在单单一处定义数据验证规则,因而没必要一再重写同样的验证代码。
原文标题:How to use data annotations in C#,作者:Joydip Kanjilal
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】