3

今天(2010 年 1 月 15 日)Scott 写了一篇关于 ASP.NET MVC2 模型验证的博客

http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx

任何人都知道如何以编程方式在运行时添加验证规则?

“程序化注册”是ValidationAspects支持的类似功能

// register lambda syntax validation functions
typeof(User).GetProperty("Name").AddValidation<string>((name, context) => 
  { if (!Exists(name)) { throw new ValidationException("Username is unknown"); } } );

// register validation factories (classes)
typeof(User).GetProperty("Name").AddValidation(new [] { new NotNullOrEmpty()} );

// don't like strings?
TypeOf<User>.Property(user => user.Name).AddValidation(new [] { new NotNullOrEmpty()} );
4

2 回答 2

1

要提供自定义元数据,您必须实现抽象类 ModelMetadataProvider 并将其注册到 global.asax 中:

           ModelMetadataProviders.Current = new ConventionMetadataProvider();

这不是在运行时添加验证属性。您只需将所有验证信息提供到 ModelMetadata 类中,然后由 HTML.EditorFor 位读取。

于 2010-01-16T23:47:01.493 回答
0

属性是在编译时创建的,而不是在运行时创建的。它们在编译时无法更改。

但是,有几个运行时验证选项。我最喜欢的是流利的验证。您创建在运行时执行的验证类。但是,您或多或少仅限于静态数据和模型数据。

于 2012-05-04T17:25:48.673 回答