我正在使用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)
任何想法是值得歡迎的。
謝謝先進。
你不知道OP的要求,所以你不能建議DataAnnotations。 VAB具有DataAnnotations沒有的許多功能和擴展點,例如基於配置的驗證和構建(無屬性)代碼配置的可能性。 – Steven 2012-08-10 08:41:54
我知道a)他使用屬性,b)元數據類,因爲我已經閱讀了這個問題。這就是爲什麼我提出這個建議* – podiluska 2012-08-10 08:45:08