这是我的自定义模型绑定器。我将断点设置为BindModel,但不会被此控制器操作触发:
public ActionResult Create(TabGroup tabGroup)
...
public class BaseContentObjectCommonPropertiesBinder : DefaultModelBinder
{
public new object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
if (controllerContext == null)
{
throw new ArgumentNullException("controllerContext");
}
if (bindingContext == null)
{
throw new ArgumentNullException("bindingContext");
}
BaseContentObject obj = (BaseContentObject)base.BindModel(controllerContext, bindingContext);
obj.Modified = DateTime.Now;
obj.Created = DateTime.Now;
obj.ModifiedBy = obj.CreatedBy = controllerContext.HttpContext.User.Identity.Name;
return obj;
}
我的注册:
//尝试了这两行
ModelBinders.Binders[typeof(TabGroup)] = new BaseContentObjectCommonPropertiesBinder();
ModelBinders.Binders.Add(typeof(TabGroup), new BaseContentObjectCommonPropertiesBinder());
答案 0 :(得分:7)
这是因为你在BindModel方法上使用了“new”关键字。 “new”表示该方法不参与虚拟调用(有关多态性的更多信息,请参阅here。
将“new”替换为“override”,它应该可以正常工作。
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
//your stuff
}