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

来自:51CTO系统频道 2020-05-23

【51CTO.com快译】数据注释(System.ComponentModel.DataAnnotations命名空间的一部分)是可以运用于类或类成员的属性,以指定类之间的关系、描述数据如何在UI中显示以及指定验证规则。本文讨论数据注释、为什么数据注释很有用以及如何在.NET Core应用程序中使用它们。

若要使用本文提供的代码示例,您应该在系统中安装Visual Studio 2019。如果还没有安装,可以在此处(//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】

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