Блок приложения проверки - Как использовать класс метаданных проверки

Я использую 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