|
|
51CTO旗下网站
|
|
移动端

如何使用C#中的用户注释?

利用数据注释使用属性标签装饰模型,以便在单单一处管理应用程序的数据定义。

作者:布加迪编译来源:51CTO|2020-05-22 07:00

如何使用C#中的用户注释?

【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控制台应用程序项目。

  1. 启动Visual Studio IDE。
  2. 点击“创建新项目”。
  3. 在“创建新项目”窗口中,从显示的模板列表中选择“控制台应用程序(.NET Core)”。
  4. 点击下一步。
  5. 在接下来显示的“配置新项目”窗口中,指定新项目的名称和位置。
  6. 点击创建。

这将在Visual Studio 2019中创建一个新的.NET Core控制台应用程序项目。我们在本文后面将使用该项目来处理数据注释。

添加System.ComponentModel.DataAnnotations命名空间

想使用本文给出的代码示例,应该将System.ComponentModel.DataAnnotations命名空间添加到您的程序。

注意,属性用于指定类或属性的元数据。数据注释属性大致分为以下几类:

  • 验证属性——用于对实体的属性实施验证规则。
  • 显示属性——用于指定数据在用户界面中应如何显示。
  • 建模属性——用于指定类之间存在的关系。

C#中的数据注释属性类

System.ComponentModel.Annotations命名空间包含几个属性类,它们可用于为您的实体类或数据控件定义元数据。最常用的属性包括如下:

  • 并发检查
  • 最大长度
  • 必需
  • 字符串长度
  • 时间戳

C#中的数据注释示例

在前面创建的控制台应用程序中的Author.cs文件中创建以下类。

  1. public class Author  
  2.  
  3. [Required(ErrorMessage = "{0} is required")]  
  4. [StringLength(50, MinimumLength = 3,  
  5. ErrorMessage = "First Name should be minimum 3 characters and a maximum of 50 characters")]  
  6. [DataType(DataType.Text)]  
  7. public string FirstName { get; set; }  
  8. [Required(ErrorMessage = "{0} is required")]  
  9. [StringLength(50, MinimumLength = 3,  
  10. ErrorMessage = "Last Name should be minimum 3 characters and a maximum of 50 characters")]  
  11. [DataType(DataType.Text)]  
  12. public string LastName { get; set; }  
  13. [DataType(DataType.PhoneNumber)]  
  14. [Phone]  
  15. public string PhoneNumber { get; set; }  
  16. [DataType(DataType.EmailAddress)]  
  17. [EmailAddress]  
  18. public string Email { get; set; }  

下列代码片段表明了您如何创建Author类的实例并为其属性赋予值。

  1. Author author = new Author();  
  2. author.FirstName = "Joydip" 
  3. author.LastName = "" 
  4. author.PhoneNumber = "1234567890" 
  5. author.Email = "joydipkanjilal@yahoo.com"

您可以在Program.cs文件的Main方法中编写下列代码片段,以验证模型。

  1. ValidationContext context = new ValidationContext(author, nullnull);  
  2. List validationResults = new List();  
  3. bool valid = Validator.TryValidateObject(author, context, validationResults, true);  
  4. if (!valid)  
  5.  
  6. foreach (ValidationResult validationResult in validationResults)  
  7.  
  8. Console.WriteLine("{0}", validationResult.ErrorMessage);  
  9.  

ValidationContext这个类为您提供了进行验证所在的上下文。如果验证成功,Validator类的TryValidateObject静态方法返回true,否则返回false。它还返回ValidationResults列表,详细列出该模型未通过的所有验证。最后,我们使用foreach循环来迭代处理ValidationResults列表,在控制台窗口显示错误消息。

完整的代码片段如下所示,供您参考。

  1. public class Author  
  2.  
  3. [Required(ErrorMessage = "{0} is required")]  
  4. [StringLength(50, MinimumLength = 3,  
  5. ErrorMessage = "First Name should be minimum 3 characters and a maximum of 50 characters")]  
  6. [DataType(DataType.Text)]  
  7. public string FirstName { get; set; }  
  8. [Required(ErrorMessage = "{0} is required")]  
  9. [StringLength(50, MinimumLength = 3,  
  10. ErrorMessage = "Last Name should be minimum 3 characters and a maximum of 50 characters")]  
  11. [DataType(DataType.Text)]  
  12. public string LastName { get; set; }  
  13. [DataType(DataType.PhoneNumber)]  
  14. [Phone]  
  15. public string PhoneNumber { get; set; }  
  16. [DataType(DataType.EmailAddress)]  
  17. [EmailAddress]  
  18. public string Email { get; set; }  
  19.  
  20. class Program  
  21.  
  22. static void Main(string[] args)  
  23.  
  24. Author author = new Author();  
  25. author.FirstName = "Joydip" 
  26. author.LastName = ""; //No value entered  
  27. author.PhoneNumber = "1234567890" 
  28. author.Email = "joydipkanjilal@yahoo.com" 
  29. ValidationContext context = new ValidationContext  
  30. (author, nullnull); 
  31. List validationResults = new  
  32. List();  
  33. bool valid = Validator.TryValidateObject  
  34. (author, context, validationResults, true);  
  35. if (!valid)  
  36.  
  37. foreach (ValidationResult validationResult in  
  38. validationResults)  
  39.  
  40. Console.WriteLine("{0}" 
  41. validationResult.ErrorMessage);  
  42.  
  43.  
  44. Console.ReadKey();  
  45.  

执行程序后,应该会看到控制台窗口显示的下列错误消息:

  1. LastName is required 

在C#中创建自定义验证属性

想创建自定义验证属性类,您应该扩展ValidationAttribute基础类,并覆盖IsValid方法,如下列代码片段所示。

  1. [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)]  
  2. public class IsEmptyAttribute : ValidationAttribute  
  3.  
  4. public override bool IsValid(object value)  
  5.  
  6. var inputValue = value as string;  
  7. return !string.IsNullOrEmpty(inputValue);  
  8.  

下列代码片段表明了你如何可以使用自定义属性来装饰Author类的FirstName和LastName属性。

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

数据注释最初作为System. ComponentModel. DataAnnotations命名空间的一部分而引入到.NET 3.5中。此后,它已成为.NET中一种广泛使用的功能。你可以充分利用数据注释在单单一处定义数据验证规则,因而没必要一再重写同样的验证代码。

原文标题:How to use data annotations in C#,作者:Joydip Kanjilal

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

【责任编辑:庞桂玉 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

思科交换网络安全指南

思科交换网络安全指南

安全才能无忧
共5章 | 思科小牛

21人订阅学习

云计算从入门到上瘾

云计算从入门到上瘾

传统IT工程师的转型
共26章 | 51CTO阿森

206人订阅学习

从头解锁Python运维

从头解锁Python运维

多维度详解
共19章 | 叱诧少帅

345人订阅学习

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微