0

我正在使用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) 

任何想法是值得歡迎的。

謝謝先進。

回答

1

我是企業圖書館的忠實粉絲,但我認爲使用MVC進行驗證的更好方法是讓您的ViewModel實現IValidatableObject。這樣,它會在綁定階段自動得到驗證ModelState.Isvalid

+0

你不知道OP的要求,所以你不能建議DataAnnotations。 VAB具有DataAnnotations沒有的許多功能和擴展點,例如基於配置的驗證和構建(無屬性)代碼配置的可能性。 – Steven 2012-08-10 08:41:54

+0

我知道a)他使用屬性,b)元數據類,因爲我已經閱讀了這個問題。這就是爲什麼我提出這個建議* – podiluska 2012-08-10 08:45:08

相關問題