【问题标题】:MS MVC3 Model Binding an ObjectMS MVC3 模型绑定对象
【发布时间】:2011-07-24 19:37:06
【问题描述】:

有人可以帮助我更好地理解 DefaultModelBinder 以及它如何处理绑定具有对象类型属性的模型吗?

我已经下载了代码并尝试跟踪它,但还是有点摸不着头脑。

假设我有一个这样的模型:

public class MyModel{
    public object MyProperty{ get; set; }
}

并假设我的表单都是正确生成的(例如:name="MyModel.MyProperty")

MyProperty 实际设置为特定类型实例的各种情况会发生什么情况?

在我的例子中,我从 DefaultModelBinder 派生了一个自定义绑定器并重写 CreateModel() 以返回一个 MyModel,并将 MyProperty 设置为正确的类型。

我注意到如果我将 MyProperty 设置为一个字符串,那么由于某种原因 DefaultModelBinder::BindProperty() 会返回一个大小为 1 的字符串 [] 以及表单字段的内容,而不仅仅是一个字符串。为什么?

如果 MyProperty 是一些更复杂的类型,即使我的表单字段都被正确命名(例如:name="MyModel.MyProperty.FirstName"),绑定似乎根本不起作用。

以前有没有人处理过这样的复杂/抽象模型绑定场景?有没有更好的办法? (我知道这很奇怪,但我确实需要让 MyModel 的 MyProperty 成为对象,因为直到运行时我才知道它实际上是什么类型)

【问题讨论】:

    标签: asp.net-mvc-3 object modelbinders defaultmodelbinder


    【解决方案1】:

    考虑使用接口并为其使用自定义活页夹。这可能吗?那么运行时就没有未知的对象类型了。

    【讨论】: