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();" })
- 我应该如何在ASP.NET MVC 4服务提供程序中实现SAMLP 2.0?
- MVC 3模型validation问题 – 监督或设计
- 使用新的Razor View引擎,我的HtmlHelpers应该返回字符串还是IHtmlString?
- ASP.NET MVC 5中的自定义错误页面
- 如何在mvc 4的web.config文件中添加程序集
- 当为输入字段asp.net mvc输入不正确的数据类型时,覆盖错误消息(值’xxx’对Age无效)
- Asp.Net Identity Localization PublicKeyToken
- 使用Get将ASP.Net MVC中的ViewModel从View传递到另一个View
- 与区域同名的控制器 – Asp.Net MVC4