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

私の登録:

// これら 2 行の両方を試しました

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 に答える