mvc2 - 获取反映表单提交的URL

时间:2010-10-29 19:10:23

标签: asp.net-mvc-2 forms url-rewriting url-routing

我有一个带有表单的MVC2应用程序(比如ya do)。用户在表单中输入一个查询(在/ Cars / Index视图中)并点击“提交”按钮,该按钮发布到CarsController的详细信息操作 - 详细信息视图呈现结果,所有是好,好。

用户可以输入一个URL(例如/ Cars / Details / 123-125)并显示123,124和125显示的详细信息视图,就像您在表单上输入一样。也很好。

如果可能的话,我想启用的是,当用户输入“123-125”或表格中的任何内容时,URL也会反映结果 - 而不是URL的“/ Cars / Details”,这就是现在显示,我希望它显示“/ Cars / Details / 123-125”。

对于我的生活,我无法弄清楚应该怎么做。

感谢任何帮助。

3 个答案:

答案 0 :(得分:0)

将您的表单更改为GET而不是POST方法(POST是默认设置),它应该可以正常工作。

<% using (Html.BeginForm("Action", "Controller", FormMethod.Get)) { %>

答案 1 :(得分:0)

听起来它找不到/ Cars / Details / 123-125的匹配路线定义。我认为这可能会发生,因为路由引擎的工作方式。

ASP.NET MVC Route Contraints with {ID}-{Slug} Format

答案 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按钮时会感到烦恼。