.NET Framework用于从类中提取数据注释信息的类是什么?
我有一种情况需要从ASP.NET ViewModel中提取数据注释信息以执行一些更高级的验证。.NET Framework用于从类中提取数据注释信息的类是什么?
不用编写我自己的类型描述符类,我想知道我是否可以使用本机描述符类。
即使数据注释不绑定到ASP.NET MVC,如果有一些ASP.NET MVC的具体实现,那对我来说不会有问题。
任何想法?
正如我怀疑的那样,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。
正如我所说,我知道我可以编写一个类型描述符类来读取属性..我问是否有一些已经在框架内烘烤 – 2012-02-08 12:40:30
我很欣赏你的努力,但我最终找到了我需要的东西。检查我的答案。 – 2012-02-08 13:08:03
命名空间System.ComponentModel.DataAnnotations包含类Validator,该类用于验证用ValidationAttributes装饰的对象的对象或属性。
我觉得这个类被大多数部分(ASP.NET MVC,WCF RIA Services等)所依赖的验证逻辑框架所使用。
如果您想扩展基本的验证功能,您可以编写自己的ValidationAttribute s并让Validator检查您的对象。
这一切都是通过反思完成的。 – Oded 2012-02-08 12:37:29
@已结束。我知道,但微软必须实现一个类型描述符类封装这个逻辑。每次你需要知道一个属性是否是必需的时候,重新编写它是不切实际的 – 2012-02-08 12:39:14