3

今天(15日2010年1月),斯科特在博客的ASP.NET MVC2模型验证MVC模型验证编程注册支持

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()}); 
+0

相关:http://blogs.msdn.com/marcinon/archive/2008/05/22/dynamic-data-samples-custom-metadata-providers.aspx – 2010-01-15 19:46:23

回答

1

要提供自定义元数据,你就必须实现抽象类ModelMetadataProvider并注册您的Global.asax内支持类似的功能:

  ModelMetadataProviders.Current = new ConventionMetadataProvider(); 

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

+0

您的意思是我们不能在运行时添加验证属性具有默认功能? 请您详细说明一下:) – 2010-01-17 09:27:52

0

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

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