【发布时间】:2011-08-28 17:18:20
【问题描述】:
这个问题在早期版本的 MVC 中是asked before。还有this blog entry 关于解决问题的方法。我想知道 MVC3 是否引入了任何可能有帮助的东西,或者是否还有其他选择。
简而言之。这是情况。我有一个抽象的基础模型和 2 个具体的子类。我有一个使用EditorForModel() 呈现模型的强类型视图。然后我有自定义模板来呈现每种具体类型。
问题出现在发布时间。如果我让 post action 方法将基类作为参数,那么 MVC 无法创建它的抽象版本(无论如何我都不想要它,我希望它创建实际的具体类型)。如果我创建了多个仅因参数签名而异的 post action 方法,那么 MVC 会抱怨它不明确。
据我所知,对于如何解决这个问题,我有几个选择。由于各种原因,我不喜欢它们中的任何一个,但我会在这里列出它们:
- 按照 Darin 在我链接到的第一篇文章中的建议创建自定义模型绑定器。
- 按照我链接到的第二篇文章的建议创建一个鉴别器属性。
- 根据类型发布到不同的操作方法
- ???
我不喜欢1,因为它基本上是隐藏的配置。其他一些处理代码的开发人员可能不知道它,并浪费大量时间试图弄清楚为什么在更改内容时会出现问题。
我不喜欢 2,因为它看起来有点 hacky。但是,我倾向于这种方法。
我不喜欢 3,因为这意味着违反 DRY。
还有其他建议吗?
编辑:
我决定采用达林的方法,但稍作改变。我将此添加到我的抽象模型中:
[HiddenInput(DisplayValue = false)]
public string ConcreteModelType { get { return this.GetType().ToString(); }}
然后在我的DisplayForModel() 中自动生成一个隐藏的。您唯一需要记住的是,如果您不使用DisplayForModel(),则必须自己添加。
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-3 polymorphism model-binding