.NET Framework用于从类中提取数据注释信息的类是什么?

问题描述:

我有一种情况需要从ASP.NET ViewModel中提取数据注释信息以执行一些更高级的验证。.NET Framework用于从类中提取数据注释信息的类是什么?

不用编写我自己的类型描述符类,我想知道我是否可以使用本机描述符类。

即使数据注释不绑定到ASP.NET MVC,如果有一些ASP.NET MVC的具体实现,那对我来说不会有问题。

任何想法?

+1

这一切都是通过反思完成的。 – Oded 2012-02-08 12:37:29

+0

@已结束。我知道,但微软必须实现一个类型描述符类封装这个逻辑。每次你需要知道一个属性是否是必需的时候,重新编写它是不切实际的 – 2012-02-08 12:39:14

正如我怀疑的那样,ASP.NET MVC确实创建了一个名为ModelMetadata的类的帮助器,以便从模型中提取元信息,并考虑数据注释属性。请参阅示例:

 [HttpPost] 
     public ActionResult Create(AppointmentViewModel formModel) 
     { 
      var metaInfo = ModelMetadata.FromLambdaExpression<AppointmentViewModel, DateTime>(model => model.Date, null); 
      var dateIsRequired = metaInfo.IsRequired; 

      // do some logic here.. 

      return this.Edit(formModel); 
     } 

这样可以减少手动读取基本方案的数据注释属性的需求。

数据注释只是普通的属性,可以使用属性的正常反射机制来访问。

请参阅MSDN上的Accessing Custom Attributes和编程C#的Chapter 18

+0

正如我所说,我知道我可以编写一个类型描述符类来读取属性..我问是否有一些已经在框架内烘烤 – 2012-02-08 12:40:30

+0

我很欣赏你的努力,但我最终找到了我需要的东西。检查我的答案。 – 2012-02-08 13:08:03

命名空间System.ComponentModel.DataAnnotations包含类Validator,该类用于验证用ValidationAttributes装饰的对象的对象或属性。

我觉得这个类被大多数部分(ASP.NET MVC,WCF RIA Services等)所依赖的验证逻辑框架所使用。

如果您想扩展基本的验证功能,您可以编写自己的ValidationAttribute s并让Validator检查您的对象。