MVC绑定表单数据问题

Joh*_*ohn 6 asp.net-mvc

我正在使用一个匹配表单中所有字段的对象.然后我使用默认绑定来填充我的操作中的对象,就像这样;

public ActionResult GetDivisionData(DivisionObj FormData)
Run Code Online (Sandbox Code Playgroud)

我的DivisionObj在构造函数中将其所有值初始化为string.empty.

问题是当绑定器从发布的表单数据填充模型时,任何未发布的数据在对象中都设置为null,尽管我初始化对象以包含空字符串.

有没有办法改变这一点,以便未发布的数据将是一个空字符串.

Jab*_*Jab 13

这是DefaultModelBinder的默认行为,更具体地说是DataAnnotations框架. 默认情况下,ConvertEmptyStringToNull设置为true.您可以创建自己的模型绑定器并替换默认的模型绑定器.

public class EmptyStringModelBaseBinder : DefaultModelBinder
{
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        bindingContext.ModelMetadata.ConvertEmptyStringToNull = false;

        return base.BindModel(controllerContext, bindingContext);
    }
}
Run Code Online (Sandbox Code Playgroud)

那么在全球......

ModelBinders.Binders.DefaultBinder = new EmptyStringModelBaseBinder();
Run Code Online (Sandbox Code Playgroud)

虽然我希望他们有一种静态的方法来为默认的模型绑定器设置它.也许在v3 :)

或者,您也可以使用该[DisplayFormat(ConvertEmptyStringToNull=false)]属性在每个属性的基础上设置它.