自定义模型绑定器未触发

时间:2010-04-06 11:01:52

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

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

1 个答案:

答案 0 :(得分:7)

这是因为你在BindModel方法上使用了“new”关键字。 “new”表示该方法不参与虚拟调用(有关多态性的更多信息,请参阅here

将“new”替换为“override”,它应该可以正常工作。

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