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

时间:2014-02-17 12:52:36

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

我有一个代表事物下拉列表的表单。您选择所需的东西并点击“确定”按钮。它使用GET提交表单,结果URL为:

/东西/ IdentificationInformation?jamesID = 26

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

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

但是这个网址路线没有被应用?

提交的表单如下所示:

        @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 个答案:

答案 0 :(得分:0)

问题是您的路由期望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?