2010-04-06 76 views
1

这是我的自定义模型绑定器。我有我的断点设置在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()); 

回答

7

这是因为你在BindModel方法上使用了“new”关键字。 “新”是指该方法不会参与虚拟调用(更多关于多态,你可以阅读here

替换“新”与“覆盖”,它应该工作的罚款。

public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
{ 
    //your stuff 
}