MVC Action Model Binding 空字串變成null

在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,打完收工

參考網址: