我可以动态发布视图模型吗?

时间:2012-04-15 21:29:30

标签: c# asp.net-mvc-3 dynamic http-post

在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 class21dynamic model(或者等价物)都会捕获该对象?

1 个答案:

答案 0 :(得分:2)

没有。至少没有使用自定义模型绑定器。

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

所有模型绑定器都会查看为action方法指定的参数类型,然后查看Request值(querystring或post)并尝试匹配它们。如果找到匹配项,则实例化该对象。

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

编辑:

您可能会发现此问题很有用

Polymorphic model binding