Блок приложения проверки - Как использовать класс метаданных проверки
Я использую VAB для проверки некоторых классов с атрибутами, и я использую класс метаданных, чтобы разделить одну и ту же проверку между различными классами. Когда я пытаюсь проверить объект в контроллере (кстати, я использую asp.net mvc), ValidationResults
не имеет ошибок и моя сущность не должна быть действительной. Но ASP.NET MVC делает свое волшебство, потому что ModelState.IsValid
ложно Я думаю, проблема в том, как я делаю ручные проверки.
В 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
ИЛИ ЖЕ
ValidationResults res = Validation.Validate<FooViewModel>(vm);
//res.Count is 0
//ModelState.IsValid is false
if(ModelState.IsValid)
Любая идея приветствуется.
Заранее спасибо.
2 ответа
Я большой поклонник корпоративной библиотеки, но я думаю, что лучший способ сделать валидацию с помощью MVC - это реализовать вашу ViewModel IValidatableObject
, Таким образом, он автоматически проверяется на этапе привязки, который устанавливает ModelState.Isvalid
Чтобы ваш VAB-валидатор мог подключиться к валидации ASP.NET MVC, я думаю, вам нужно будет реализовать ModelValidatorProvider и обернуть результаты валидации VAB, как описано здесь... http://bradwilson.typepad.com/blog/2009/10/enterprise-library-validation-example-for-aspnet-mvc-2.html записи ASPNET-Mvc-2.html