1

在 asp.net mvc3 中,我想要一个通用方法,它可以将 viewmodel 对象从发送到数据库中正确位置的任何位置添加到数据库。为此,我试图传递发布的模型。但是,我在动态执行它时遇到了一点困难。我试过了,但没有用:

看法:

(psuedo)
begin form aiming at Add
 fields
input type = submit

控制器动作

[HttpPost]
public ActionResult Add(dynamic model,...)

问题是模型永远不会被填充。隐藏字段是,但模型定义的实际字段和帮助器不会进入模型。我意识到仅仅命名它model很可能不会正确排列。我确定我是否对模型进行了强类型化,例如(MyExplicitClass model,...)它会起作用,但这会破坏动态方法,因为我希望能够发送 class1、class2、class3、class5、class8、class13 等。

有没有办法让这个工作,无论@model class21发送什么,dynamic model(或等效)都会捕获该对象?

4

1 回答 1

2

不,至少在不使用自定义模型绑定器的情况下不会。

您对模型绑定的工作方式存在根本性的误解。您认为模型绑定基于视图中的 @model 工作。这与事实相去甚远。模型绑定通过查看 action 方法中指定的参数来工作。

模型绑定器所做的只是查看为操作方法指定的参数类型,然后查看请求值(查询字符串或帖子)并尝试匹配它们。如果找到匹配项,则实例化该对象。

这里的关键是模型绑定器只实例化action方法的参数中指定的对象。什么对象是“动态的”?它不知道。因此它不能创建任何类型。

编辑:

你可能会发现这个问题很有用

多态模型绑定

于 2012-04-15T21:31:40.937 回答