0

VAB を使用していくつかのクラスを属性で検証しており、メタデータ クラスを使用して異なるクラス間で同じ検証を共有しています。コントローラーでオブジェクトを検証しようとすると (私は asp.net mvc を使用しています)、ValidationResultsエラーは発生せず、エンティティは有効ではありません。しかし、ASP.NET MVCModelState.IsValidは false であるため、魔法のように機能します。問題は、手動検証のやり方にあると思います。

Global.asax では、クラスとメタデータ クラスの間の関連付けを読み込んでいます。

グローバル.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)

どんなアイデアでも大歓迎です。

ありがとうございます。

4

2 に答える 2

1

私はエンタープライズ ライブラリの大ファンですが、MVC で検証を行うより良い方法は、ViewModel を実装することだと思いますIValidatableObject。そうすれば、設定するバインディングフェーズ中に自動的に検証されますModelState.Isvalid

于 2012-08-10T07:55:34.003 に答える
0

VAB バリデーターを ASP.NET MVC の検証にフックするには、ModelValidatorProvider を実装し、ここで説明されているように VAB 検証結果をラップする必要があると思います... http://bradwilson.typepad.com/blog/2009/10/enterprise- library-validation-example-for-aspnet-mvc-2.html

于 2012-08-11T10:45:32.223 に答える