【问题标题】:routes.MapRoute not working for a form submitted with GETroutes.MapRoute 不适用于使用 GET 提交的表单
【发布时间】:2014-03-16 18:47:08
【问题描述】:

我有一个表示事物下拉列表的表单。您选择所需的东西并点击确定按钮。它使用 GET 提交表单,生成的 URL 是:

/Something/IdentificationInformation?jamesID=26

所以我应用了一个路由规则:

        routes.MapRoute(
            name: null, // "Add James relationship"
            url: "James/IdentificationInformation/{jamesID}",
            defaults: new { 
                Controller = "James",
                action = "IdentificationInformation"
            }
        );

但是这个 url 路由没有被应用?

提交的表单如下所示:

        @using (Html.BeginForm("IdentificationInformation", "James", FormMethod.Get))
        {
            <div class="col-lg-9 col-md-9 col-sm-9 add-margin-top">
                    @Html.DropDownList("jamesID", new SelectList(Model, "JamesID", "Name"), new { id = "JamesDropdownList" })
            </div>
            <div class="col-lg-3 col-md-3 col-sm-3 add-margin-top">
                @Html.ContinueButton("Continue")
            </div>
        }

【问题讨论】:

  • 我可以在这个问题中添加什么来帮助获得答案吗?有点奇怪。
  • 您是否有在此之前定义的任何可能首先匹配的路由?此外,在您的 Html.BeginForm() 中,控制器看起来像是 JamesController ...
  • 之前没有路线,没有。那是一个错字,抱歉,感谢您了解这一点。我最终不得不做 2 个控制器,一个从表单获取 POST 请求,然后重定向到另一个返回视图的控制器。好像路由规则对表单提交不起作用?

标签: c# razor asp.net-mvc-5


【解决方案1】:

问题是您的路由期望 jamesID 成为 url 路径的一部分,但表单将其作为查询字符串的一部分提交。如果你把你的路线改成这样,它应该匹配:

    routes.MapRoute(
        name: null, // "Add James relationship"
        url: "James/IdentificationInformation",
        defaults: new { 
            Controller = "James",
            action = "IdentificationInformation"
        }
    );

当然,这个路由可能甚至不是必需的,因为它相当于 {controller}/{action} 的默认路由。

如果你想变得花哨,你可以定义一个自定义的 QueryStringConstraint 来确保 jamesID 作为路由匹配的一部分在查询字符串中。这是一个 SO 问题,展示了如何做到这一点:

Can my MVC2 app specify route constraints on Query String parameters?

【讨论】:

  • 谢谢...为什么...可惜实施起来很麻烦:)。我目前的解决方案是 2 控制器方法。一个从表单获取 POST 请求,然后重定向到另一个返回视图的控制器方法。一个页面的 2 个请求只是为了一个漂亮的 URL……我想答案是它的解决方法很差。我看看能不能实现你的想法。
猜你喜欢
  • 2011-07-18
  • 2012-10-27
  • 2017-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-14
  • 2011-06-16
  • 2018-01-08
相关资源
最近更新 更多