Pergunta

Este é o meu fichário personalizado. Eu tenho meu ponto de interrupção definido no BindModel, mas não é demitido com esta ação do controlador:

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;
    }

Meu registro:

// tentou as duas duas linhas

ModelBinders.Binders[typeof(TabGroup)] = new BaseContentObjectCommonPropertiesBinder();
ModelBinders.Binders.Add(typeof(TabGroup), new BaseContentObjectCommonPropertiesBinder());
Foi útil?

Solução

É porque você usou a palavra -chave "nova" no método BindModel. O "novo" significa que o método não participará de invocação virtual (mais sobre o polimorfismo que você pode ler aqui.

Substitua "Novo" por "Substitua" e deve funcionar bem.

public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
    //your stuff
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top