Domanda

Questo è il mio modello personalizzato legante. Ho il mio set al punto di interruzione BindModel ma non viene licenziato con questa azione di controllo:

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

La mia iscrizione:

// provato entrambe queste due linee

ModelBinders.Binders[typeof(TabGroup)] = new BaseContentObjectCommonPropertiesBinder();
ModelBinders.Binders.Add(typeof(TabGroup), new BaseContentObjectCommonPropertiesBinder());
È stato utile?

Soluzione

E 'perché si è utilizzato parola chiave "nuovo" sul metodo di BindModel. I "nuovi" mezzi che il metodo non parteciperà invocazione virtuale (più sul polimorfismo si può leggere qui .

Sostituire "nuova" con "override" e dovrebbe funzionare bene.

public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
    //your stuff
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top