【问题标题】:ASP.net MVC problems when model binding with sub-class模型与子类绑定时的 ASP.net MVC 问题
【发布时间】:2011-05-22 10:06:10
【问题描述】:

我有两种类型的联系人实体。一个只有一个电子邮件地址,另一个是从这个地址驱动并包含邮政地址的字段。

我正在尝试使我的控制器操作适用于任何一种类型的联系人,但到目前为止遇到了两个问题...

  1. 当使用 DataAnnotations 进行验证时,其验证字段来自基类来自子类的字段。我实际上希望这以相反的顺序发生。无论如何要重新安排订单?通常当然可以只更改字段的顺序,但如果字段属于不同的类,这是不可能的。

  2. 我发现我需要手动创建模型,因为默认模型绑定器似乎只想创建操作参数中指定的特定类型。当我尝试使用“UpdateModel”手动绑定模型时,它只绑定基本类型字段(基本类型是我的联系工厂返回的类型)。

有人对此有什么建议吗?看起来我将不得不恢复到意大利面条代码,不断评估正在操作的联系人类型。

干杯,伊恩。

【问题讨论】:

  • 好吧,我已经通过两个不相关的联系人视图模型、两个不同的局部视图、不键入主网页模型和控制器中的大量“if”语句来让事情正常进行。我猜 MVC 在某些关键位置不适应多态性!您可以看到模型绑定器没有考虑模型的运行时类型,因为在 MVC 源代码中可以看到它根据类型参数而不是传入对象的类型查找类型信息。
  • 请告诉我有更好的方法!!

标签: asp.net asp.net-mvc data-annotations


【解决方案1】:

我认为您需要创建自己的 ModelBinder。看看ASP.NET MVC 3: DefaultModelBinder with inheritance/polymorphism

【讨论】:

    【解决方案2】:

    您可以尝试为两个联系人实体实现通用接口。并在操作参数中使用该接口,针对接口进行验证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-27
      • 2014-01-19
      • 2012-11-13
      • 2011-01-28
      相关资源
      最近更新 更多