string.empty converted to null when passing JSON object to MVC Controller

前端 未结 5 763
野趣味
野趣味 2020-11-30 01:03

I\'m passing an object from client to server. Properties of the object which are represented as string.empty are being converted to null during this process. I was wondering

5条回答
  •  长情又很酷
    2020-11-30 01:43

    This is a MVC feature which binds empty strings to nulls.

    This logic is controlled with the ModelMetadata.ConvertEmptyStringToNull property which is used by the DefaultModelBinder.

    You can set the ConvertEmptyStringToNull with the DisplayFormat attribute

    public class OrderDetailsModel
    {
        [DisplayFormat(ConvertEmptyStringToNull = false)]
        public string Comment { get; set; }
    
        //...
    }
    

    However if you don't want to annotate all the properties you can create a custom model binder where you set it to false:

    public class EmptyStringModelBinder : DefaultModelBinder 
    {
        public override object BindModel(ControllerContext controllerContext,
                                         ModelBindingContext bindingContext)
        {
            bindingContext.ModelMetadata.ConvertEmptyStringToNull = false;
            Binders = new ModelBinderDictionary() { DefaultBinder = this };
            return base.BindModel(controllerContext, bindingContext);
        }
    }
    

    And you can use the ModelBinderAttribute in your action:

    public ActionResult SaveOrderDetails([ModelBinder(typeof(EmptyStringModelBinder))] 
           OrderDetailsModel orderDetailsModel)
    {
    }
    

    Or you can set it as the Default ModelBinder globally in your Global.asax:

    ModelBinders.Binders.DefaultBinder = new EmptyStringModelBinder();
    

    You can read more about this feature here.

提交回复
热议问题