2014-09-02 50 views
2

假設:如何在ASP.NET MVC中驗證FluentValidation之前攔截我的模型?

  1. FluentValidation是使用依賴注入我的ASP.NET MVC 5 Web服務器集成。
  2. FluentValidation規則已設置爲驗證我的模型屬性,比如說propA

比方說,我有一個頁面發佈到ASP.NET MVC 5 web服務器,我的模型propA根據用戶輸入的TextBox值設置。但是我想知道,如果我可以注入我自己的序列化方法來在FluentValidation運行於Web服務器驗證我的模型之前更改propA的值?

可能嗎?

回答

1

驗證兩個FluentValidation和DataAnnotation接近模型後工作綁定,所以你可以自定義的模型綁定器創建模型:

public class YourBinder : DefaultModelBinder 
{ 
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     var model = (YourModel)base.BindModel(controllerContext, bindingContext); 

     model.PropA = model.PropA + " catched before validation"; 
     return model; 
    } 
} 

在Global.asax中註冊它

protected void Application_Start() 
{ 
    ModelBinders.Binders.Add(typeof(YourModel), new YourBinder()); // asssociate model type with binder 
} 

又通參數您的型號在行動中:

public ActionResult Submit(YourModel model) //YourBinder automatically used 
{ 
    if (ModelState.IsValid) 
    { 
     //... 
    } 
}