自定义模型绑定返回默认值

时间:2011-07-22 10:07:50

标签: asp.net-mvc-3 model-binding

我创建了一个继承自DefaultModelBinder的自定义Model Binder,并重写了BindProperty方法,将“duration”属性设置为35。

protected override void BindProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor)
    {
        if (propertyDescriptor.Name == "Duration")
        {
            var request = controllerContext.HttpContext.Request;
            var prefix = propertyDescriptor.Name;

            SetProperty(controllerContext, bindingContext, propertyDescriptor, 35);
        }
        base.BindProperty(controllerContext, bindingContext, propertyDescriptor);
    }

这个方法中的断点被击中,一切看起来都很好,但是当我的动作被击中之后,我的模型又恢复为给予持续时间默认值为0。

[HttpPost]
public ActionResult Create(ModelType model)
    { var val = model.Duration;
      //val = 0 :(
    }

我有点卡住了,请帮帮忙。

1 个答案:

答案 0 :(得分:0)

那是因为你正在调用基本方法。试试这样:

protected override void BindProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor)
{
    if (propertyDescriptor.Name == "Duration")
    {
        var request = controllerContext.HttpContext.Request;
        var prefix = propertyDescriptor.Name;

        SetProperty(controllerContext, bindingContext, propertyDescriptor, 35);
        return; // <!-- We have set the value so no need to continue any more
    }

    // This will be called for all other properties
    base.BindProperty(controllerContext, bindingContext, propertyDescriptor);
}