2010-04-06 4 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. «Новый» означает, что метод не будет участвовать в виртуальном вызове (подробнее о полиморфизме можно прочитать here.

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

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