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());
4

1 回答 1

7

这是因为您在 BindModel 方法上使用了“new”关键字。“新”意味着该方法不会参与虚拟调用(更多关于多态性的信息,您可以在此处阅读。

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

public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
    //your stuff
}
于 2010-04-06T12:05:29.597 回答