如果您发布一个表单并且它的操作具有查询参数并且您有表单数据,那么ASP.NET/MVC 中表单绑定的定义行为是什么?
例如:
<form action="my/action?foo=1" method="post">
<input type="hidden" name="bar" value="2">
</form>
如果提交了这样的表单,控制器是否应该同时获取foo
和bar
/或仅获取其中一个?
如果您发布一个表单并且它的操作具有查询参数并且您有表单数据,那么ASP.NET/MVC 中表单绑定的定义行为是什么?
例如:
<form action="my/action?foo=1" method="post">
<input type="hidden" name="bar" value="2">
</form>
如果提交了这样的表单,控制器是否应该同时获取foo
和bar
/或仅获取其中一个?
控制器将获得这两个值。默认模型绑定器将尝试从 URI(查询字符串或路由参数)或正文(并且开箱即用地支持表单数据)中查找参数的匹配项。
请注意,您可以看到 Html.BeginForm 助手支持这一点,您可以通过 routeValues 来实现:
@Html.BeginForm("ActionName", "ControllerName", new { foo = "1" })
它本质上会生成与您的表单标签相同的 html,但希望为那些发现此问题并想知道如何使用 BeginForm 帮助程序传递不属于表单的其他值的人发布。
我觉得应该可以两者兼得。在这种情况下,我将创建一个包含两个字符串或 int 属性的 ViewModel,一个名为“foo”,另一个名为“bar”,并让您的 ActionResult 接受 ViewModel。你应该看到两个值都进来了。