我有一个代表事物下拉列表的表单。您选择所需的东西并点击“确定”按钮。它使用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>
}
答案 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?