所以我有一个继承自DefaultModelBinder的自定义模型绑定器,我将覆盖BindProperty()方法来处理我们创建的字段类型。
我还有一个控制器,我们想要覆盖BindModel(),因为我们正在使用该控制器处理多个视图的会话中的对象。
所以我有CustomModelBinder:DefaultModelBinder,然后在我们覆盖BindModel()的类中,我继承了CustomModelBinder。 SpecialModelBinder:CustomModelBinder
但是我在CustomModelBinder中覆盖了BindProperty()时设置了一个断点,当使用同样覆盖BindModel()的控制器时,它永远不会被击中。
我不能这样继承吗?这里发生了什么?
谢谢!
编辑:
在global.asax中:
ModelBinders.Binders.Add(typeof(ClassA), new SpecialModelBinder());
ModelBinders.Binders.Add(typeof(ClassB), new CustomModelBinder());
ModelBinders.Binders.Add(typeof(ClassC), new CustomModelBinder());
ModelBinders.Binders.Add(typeof(ClassD), new CustomModelBinder());
public class CustomModelBinder : DefaultModelBinder
{
// this will be hit in controllers that handle classes B, C, and D, but will not be hit in controller that handles ClassA
protected override void BindProperty(...){}
}
public class SpecialModelBinder : CustomModelBinder
{
// this will be hit when working in controller that handles ClassA only
public override object BindModel(...){}
}
答案 0 :(得分:0)
我重新创建了您在空MVC应用程序中描述的场景,并且无法复制您在此处描述的情况。我没有问题从SpecialModelBinder
继承CustomModelBinder
并在所有类中命中两个断点。您是否还有其他可能提供解决方案的信息?正如您在此处所描述的那样,点击ClassA
的两个断点以及仅针对B,C和D的BindProperty
方法应该没有问题。
我尝试的方案:
1)编辑ClassA
。结果:BindModel()
上的SpecialModelBinder
被调用,而BindProperty()
CustomModelBinder
上的每个属性都要调用; ClassB
2)编辑BindProperty()
(或C或D)。结果:CustomModelBinder
上的Application_Start()
调用了该类中的每个属性。
Global.asax
中的{{1}}方法中除了区域和路由注册呼叫之外还有其他内容吗?