我正在创建一个MVC 3应用程序,它需要在运行时根据外部数据建立数据验证规则(例如Required,MinimumLength,MaximumLength)。在MVC 3中使用Data Annotations似乎很自然,但是提供验证元数据的属性属性是在编译时设置的。
是否存在使用数据注释和运行时提供的元数据的模式?
示例:
public string Text { get; set; }
public void SetIsRequired(string propertyName, bool required)
{
// Somehow find the property 'propertyName' and create/remove a RequiredAttribute
// on that property
}
...
SetIsRequired("Text", true);
我知道TypeDescriptor,但是没有看到修改实例属性属性的选项(只有实例的类级别属性或类型的属性级别属性)。
答案 0 :(得分:4)
在MVC 3中使用Data Annotations似乎很自然
不适合我。由于它们的声明性质,我从未真正喜欢数据注释。以声明方式进行验证会限制功能。我一直很喜欢并使用FluentValidation.NET。
答案 1 :(得分:1)
您可以使用IDataErrorInfo
接口(MVC可以使用)来编写自定义的动态验证规则。