asp.net mvc可以使用两个自定义模型绑定器吗?

时间:2010-07-15 15:40:25

标签: c# asp.net asp.net-mvc

所以我有一个继承自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(...){}
}

1 个答案:

答案 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}}方法中除了区域和路由注册呼叫之外还有其他内容吗?