我创建了一个继承自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 :(
}
我有点卡住了,请帮帮忙。
答案 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);
}