假设我有这样的路线:

"{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&amountToShow=5 部分。事实上,当我查看 ActionExecutingContext.ActionParameters 列表时,参数在那里(pageNumber 和 amountToShow)但没有值。我什至查看了请求,尽管知道 url 是“Room/Index/6/SomeThing?pageNumber=1&amountToShow=5”,但没有请求参数。

我认为这可能与按钮和表单有关,也许这是不可能的,但后来我将路线调整为:
"{controller}/{action}/{roomId}/{name}/{pageNumber}/{amountToShow}"

它可以工作,除了 url 是 super 格式化的:
 Room/Index/6/SomeThing/1/5

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

更新

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

最佳答案

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

所以,而不是你的表单块,试试这个:

<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>

关于asp.net-mvc - ASP.Net MVC : Form with Get Method Losing Parameters on Submit,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1189629/

10-13 05:43