Связыватель пользовательской модели не срабатывает

Это мой пользовательский переплет модели. У меня установлена ​​точка останова в 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());

person mare    schedule 06.04.2010    source источник


Ответы (1)


Это потому, что вы использовали ключевое слово «новое» в методе BindModel. «Новый» означает, что метод не будет участвовать в виртуальном вызове (подробнее о полиморфизме вы можете прочитать здесь.

Замените «новый» на «переопределить», и все должно работать нормально.

public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
    //your stuff
}
person Misha N.    schedule 06.04.2010