我有一个带有表单的MVC2应用程序(比如ya do)。用户在表单中输入一个查询(在/ Cars / Index视图中)并点击“提交”按钮,该按钮发布到CarsController的详细信息操作 - 详细信息视图呈现结果,所有是好,好。
用户可以输入一个URL(例如/ Cars / Details / 123-125)并显示123,124和125显示的详细信息视图,就像您在表单上输入一样。也很好。
如果可能的话,我想启用的是,当用户输入“123-125”或表格中的任何内容时,URL也会反映结果 - 而不是URL的“/ Cars / Details”,这就是现在显示,我希望它显示“/ Cars / Details / 123-125”。
对于我的生活,我无法弄清楚应该怎么做。
感谢任何帮助。
答案 0 :(得分:0)
将您的表单更改为GET
而不是POST
方法(POST是默认设置),它应该可以正常工作。
<% using (Html.BeginForm("Action", "Controller", FormMethod.Get)) { %>
答案 1 :(得分:0)
听起来它找不到/ Cars / Details / 123-125的匹配路线定义。我认为这可能会发生,因为路由引擎的工作方式。
答案 2 :(得分:0)
好的,这是我提出的答案:
简而言之:重定向到GET
基本上,我使用[HttpPost]属性编写一个动作,将表单提交重定向到具有[HttpGet]属性的另一个动作。无论您是手动提交表单还是在URL中输入,该路径都有效。
[HttpPost]
public ActionResult Details(CarViewModel model, int? pageNbr) {
// simply takes the form POST and re-routes it as a GET to pretty up the URL
// (see second Details action)
int page = pageNbr ?? 0;
return RedirectToAction("Details", new { query = model.Query, pageNbr = page });
}
[HttpGet]
public ActionResult Details(CarViewModel model, int pageNbr)
{
// various magic to create the view...
return View(avm);
}
作为一个额外的奖励,这需要照顾“你确定要重新提交吗?”当有人刷新页面或点击浏览器中的BACK按钮时会感到烦恼。