代码之家  ›  专栏  ›  技术社区  ›  Programmin Tool

Net MVC:带有Get方法的表单在提交时丢失参数

  •  3
  • Programmin Tool  · 技术社区  · 15 年前

    假设我有这样的路线:

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

    以及这样的表单操作(是的,在html ie post server处理中的操作中看起来是这样的):

    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”,但是没有请求参数?页码=1&amountToShow=5“。

    我想这可能和按钮和表单有关,也许这是不可能的,但后来我调整了路径:

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

    它可以工作,但url是超级格式的:

     Room/Index/6/SomeThing/1/5
    

    这是意料之中的事,因为这次它显然是在做它的工作。有什么想法吗?

    更新

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

    2 回复  |  直到 15 年前
        1
  •  3
  •   Adrian Godong    15 年前

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

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

    <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>
    
        2
  •  2
  •   DrydenMaker    15 年前

    我认为它会被咀嚼,因为当你通过get it appends提交表单时?请求字符串的formvalue=value&otherfield=annothervalue。这可能会导致你的?stuff=value——被IIS/ASP忽略。