9

如果您发布一个表单并且它的操作具有查询参数并且您有表单数据,那么ASP.NET/MVC 中表单绑定的定义行为是什么?

例如:

<form action="my/action?foo=1" method="post">
     <input type="hidden" name="bar" value="2">
</form>

如果提交了这样的表单,控制器是否应该同时获取foobar/或仅获取其中一个?

4

3 回答 3

8

控制器将获得这两个值。默认模型绑定器将尝试从 URI(查询字符串或路由参数)或正文(并且开箱即用地支持表单数据)中查找参数的匹配项。

于 2012-05-04T19:25:02.037 回答
2

请注意,您可以看到 Html.BeginForm 助手支持这一点,您可以通过 routeValues 来实现:

@Html.BeginForm("ActionName", "ControllerName", new { foo = "1" })

它本质上会生成与您的表单标签相同的 html,但希望为那些发现此问题并想知道如何使用 BeginForm 帮助程序传递不属于表单的其他值的人发布。

于 2012-11-09T22:00:45.200 回答
0

我觉得应该可以两者兼得。在这种情况下,我将创建一个包含两个字符串或 int 属性的 ViewModel,一个名为“foo”,另一个名为“bar”,并让您的 ActionResult 接受 ViewModel。你应该看到两个值都进来了。

于 2012-05-04T19:25:34.860 回答