我有一個從DefaultModelBinder繼承的自定義模型聯編程序。我想要它做的是在模型上設置一個屬性,這個屬性不能由DefaultModelBinder解決。它看起來像這樣:如何在修改後從DefaultModelBinder繼承的自定義模型綁定中重新驗證模型?
public class FooModelBinder : DefaultModelBinder {
public override void BindModel(ControllerContext controllerContext, ModelBindingContext modelBindingContext)
{
var model = base.BindModel(controllerContext, bindingContext);
((IFooModel)model).Bar = GetBarFromSomewhere();
return model;
}
}
然而,由於IFooModel酒吧屬性不能爲空,我使用FluentValidation與規則說,在ModelState中是無效的,我叫base.BindModel後。
所以我想或者在調用base.BindModel時避免驗證模型,或者至少清除錯誤並在設置Bar屬性後重新驗證模型。
我試圖解決驗證和驗證模型,但我似乎無法得到它的實際運行驗證,它不會以任何錯誤都會導致(即使它應該):
var validators = bindingContext.ModelMetadata.GetValidators(controllerContext);
foreach(var validator in validators) {
foreach (var result in validator.Validate(model)) {
bindingContext.ModelState.AddModelError(result.MemberName, result.Message);
}
}
在我返回模型之前運行這個之後,驗證器包含一個FluentValidationModelValidator,但是當我調用validator.Validate時,我不會收到任何錯誤。我的模型上有另一個屬性,當我之前運行base.BindModel時確實會導致錯誤,所以我期望在這裏發生相同的錯誤。
完美,這做到了!非常感謝! – 2012-02-16 07:14:12
似乎BindProperty從未運行,當我嘗試。 – 2014-07-23 18:41:10