在Mvc Web中前端Post資料給後端Action時,原本欄位值為空字串(Empty String)的欄位經過Model Bind欄位值變成null,但系統的需求是回來一樣的空字串改怎樣處理呢?
最近在改寫的系統資料流非常多的空字串,雖然通常資料庫應該存null但是系統老舊,前人訂下的規矩是空字串,所以需要處理這段功能,順便記錄一下方便以後查詢
那處理方法有兩種,一種就是在Model中增加Attribute ,因為ConvertEmptyStringToNull預設是true所以要改為false
接著Model裡會滿滿這種Attribute ???
不行 懶一定要徹底
所以在網路上有找到其他處理方式,自訂一個ModelBinder在註冊到Global
public class EmptyStringModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
bindingContext.ModelMetadata.ConvertEmptyStringToNull = false;
return base.BindModel(controllerContext, bindingContext);
}
}
接著到Global.asax.cs註冊
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
//Register Custom ModelBinder
ModelBinders.Binders.Add(typeof(string), new EmptyStringModelBinder());
}
}
這邊有指定字串型別使用,設定好後可以告別那一堆Attribute,打完收工
參考網址: