【问题标题】:asp.net mvc is it possible to use two custom model binders?asp.net mvc 是否可以使用两个自定义模型绑定器?
【发布时间】:2010-07-15 15:40:24
【问题描述】:

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

【问题讨论】:

  • 你能发布一些示例代码吗?

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


【解决方案1】:

我在一个空的 MVC 应用程序中重新创建了您描述的场景,但无法复制您在此处描述的情况。我从CustomModelBinder 子类化SpecialModelBinder 并在所有类中都击中两个断点没有问题。您是否可以提供任何其他可能阐明解决方案的信息?正如您在此处所描述的那样,对于 ClassA 和仅针对 B、C 和 D 的 BindProperty 方法同时命中两个断点应该没有问题。

我尝试过的场景: 1) 编辑ClassA。结果:为类上的每个属性调用了SpecialModelBinder 上的BindModel()CustomModelBinder 上的BindProperty(); 2)编辑ClassB(或C或D)。结果:CustomModelBinder 上的 BindProperty() 为类中的每个属性调用。

除了 Area 和 Route 注册调用之外,Global.asax 中的 Application_Start() 方法中还有其他内容吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    相关资源
    最近更新 更多