mvc Html.BeginForm不同的URL架构

我正在为这样的DropDown创建一个表单:

@{ Html.BeginForm("View", "Stations", FormMethod.Get); } @Html.DropDownList("id", new SelectList(ViewBag.Stations, "Id", "Name"), new { onchange = "this.form.submit();" }) @{ Html.EndForm(); } 

如果我从我的下拉列表中选择一个值,我会被重定向到正确的控制器,但URL不是我想要的:

/站/视图?ID = f2cecc62-7c8c-498d-b6b6-60d48a862c1c

我想要的是:

/站/查看/ f2cecc62-7c8c-498d-b6b6-60d48a862c1c

那么如何将id = querystring参数替换为我想要的更简单的URL方案呢?

FormMethod.Get的表单将始终将其表单控件的值作为查询字符串值回发。 浏览器无法根据您的路由配置生成URL,因为它们是服务器端代码。

如果你真的想生成/Stations/View/f2cecc62-7c8c-498d-b6b6-60d48a862c1c ,那么你可以使用javascript / jquery来构建自己的url并重定向

 @using (Html.BeginForm("View", "Stations", FormMethod.Get)) { @Html.DropDownList("id", new SelectList(ViewBag.Stations, "Id", "Name")) } var baseUrl = '@Url.Action("View", "Stations")'; $('#id').change(function() { location.href = baseUrl + '/' $(this).val(); }); 

附注:在.change()事件上提交不是预期的行为,并且使用户感到困惑。 建议你添加一个按钮让用户进行选择,检查然后提交表单(处理按钮的.click()事件而不是dropdownlist的.change()事件)

从中删除“ id

 @Html.DropDownList("id", new SelectList(ViewBag.Stations, "Id", "Name"), new { onchange = "this.form.submit();" })