ASP.Net MVC:在提交时使用Get方法丢失参数的表单

时间:2009-07-27 17:53:03

标签: asp.net-mvc routes

说我有这样的路线:

"{controller}/{action}/{roomId}/{name}"

这样的表单操作(并且它在html中的操作中看起来像这样,即后期服务器处理):

Room/Index/6/SomeThing?pageNumber=1&amountToShow=5

形式很简单:

<form action = "Room/Index/6/SomeThing?pageNumber=1&amountToShow=5" method="get">
   <button type="submit">SomeButton</button>
</form>

现在,当点击按钮时,请求似乎有一半失去了pageNumber = 1&amp; amountToShow = 5部分。事实上,当我查看ActionExecutingContext.ActionParameters列表时,参数就在那里(pageNumber和amountToShow),但没有值。我甚至查看了请求,并且没有请求参数,尽管它知道网址是“Room / Index / 6 / SomeThing?pageNumber = 1&amp; amountToShow = 5”。

我认为这可能与按钮和表格有关,也许这是不可能的,但后来我调整了路线:

"{controller}/{action}/{roomId}/{name}/{pageNumber}/{amountToShow}"

它的工作原理,除了网址是超级格式化的:

 Room/Index/6/SomeThing/1/5

这是可以预期的,因为这次显然正在做它的工作。有什么想法吗?

更新

正如Adrian Godong在下面的建议,我尝试使用隐藏的输入并且它有效,但这仍然会引发更多问题。为什么使用更详细的路由能够处理请求参数而没有隐藏值但缩短的路由不是。

2 个答案:

答案 0 :(得分:3)

您是否尝试将查询字符串参数移动到隐藏的输入字段中?

所以,不要使用表单块,请尝试以下操作:

<form action = "Room/Index/6/SomeThing" method="get">
    <input type="hidden" name="pageNumber" value="1" />
    <input type="hidden" name="amountToShow" value = "5" />
    <button type="submit">SomeButton</button>
</form>

答案 1 :(得分:2)

我认为当你提交一个表格时,它会因为它将'?formvalue = value&amp; otherfield = annothervalue ...'附加到请求字符串而变得有问题。这可能会导致您的'?stuff = value'被IIS / ASP忽略。