代码之家  ›  专栏  ›  技术社区  ›  Jimmyt1988

routes.MapRoute不适用于使用GET提交的表单

  •  0
  • Jimmyt1988  · 技术社区  · 11 年前

    我有一个表单,它代表一个下拉列表。您选择所需的内容并点击OK按钮。它使用GET提交表单,生成的URL为:

    /某物/身份信息?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>
            }
    
    1 回复  |  直到 11 年前
        1
  •  0
  •   Community CDub    8 年前

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

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

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

    如果您想得到更多信息,可以定义一个自定义QueryStringConstraint,以确保jamesID作为路由匹配的一部分出现在querystring中。下面是一个SO问题,说明如何做到这一点:

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