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)
どんなアイデアでも大歓迎です。
ありがとうございます。