我正在使用VAB来验证一些具有属性的类,我正在使用元数据类来在不同的类之间共享相同的验证。 当我尝试验证控制器中的对象(顺便说一句,我使用的是asp.net mvc)ValidationResults
没有错误,我的实体不应该是有效的。 但是,ASP.NET MVC做了他的魔术,因为ModelState.IsValid
是错误的。我想问题是我正在做手动验证的方式。验证应用程序块 - 如何使用验证metada类
在Global.asax中,我正在加载类和元数据类之间的关联。
的Global.asax
private static void RegisterMetadataExtensions()
{
AssociatedMetadataTypeTypeDescriptionProvider typeDescriptionProvider;
typeDescriptionProvider =
new AssociatedMetadataTypeTypeDescriptionProvider(
typeof(FooViewModel), typeof(FooMetadata));
TypeDescriptor.AddProviderTransparent(typeDescriptionProvider,
typeof(FooViewModel));
typeDescriptionProvider =
new AssociatedMetadataTypeTypeDescriptionProvider(
typeof(FooCommand), typeof(FooMetadata));
TypeDescriptor.AddProviderTransparent(
typeDescriptionProvider, typeof(FooCommand));
}
控制器
[HttpPost]
public ActionResult Action(FooViewModel vm)
{
Validator<FooViewModel> validator =
ValidationFactory.CreateValidator<FooViewModel>();
ValidationResults res = validator.Validate(vm);
//res.Count is 0
OR
ValidationResults res = Validation.Validate<FooViewModel>(vm);
//res.Count is 0
//ModelState.IsValid is false
if(ModelState.IsValid)
任何想法是值得欢迎的。
谢谢先进。
你不知道OP的要求,所以你不能建议DataAnnotations。 VAB具有DataAnnotations没有的许多功能和扩展点,例如基于配置的验证和构建(无属性)代码配置的可能性。 – Steven 2012-08-10 08:41:54
我知道a)他使用属性,b)元数据类,因为我已经阅读了这个问题。这就是为什么我提出这个建议* – podiluska 2012-08-10 08:45:08