发布具有不同操作名称的数据,但URL不变

时间:2018-07-09 04:22:15

标签: asp.net-mvc url-routing asp.net-mvc-routing

我有一个带有搜索功能的索引页面来显示数据。输入条件(或不带条件)后,我将使用POST方法将请求提交给其他操作名称(“搜索”操作),但结果将返回到“索引”视图。

Index.cshtml

@using (Html.BeginForm("Search", "Home"))
{
    // criteria fields
    <button type="submit" class="btn btn-primary">Search</button>
}

HomeController.cs

public ActionResult Index()
{
    // preparing the view model
    return View();
}

[HttpPost]
public ActionResult Search(HomeViewModel vm)
{
    // get the data
    return View("Index", vm);
}

这会将网址更改为http://localhost:12345/Home/Search,我不想显示该网址。我可以将“搜索”操作名称更改为“索引”,因此get和post请求将使用相同的名称,但是有什么方法可以使网址保持不变?

我尝试将新路由添加到RouteConfig.cs

routes.MapRoute(
    name: "Search",
    url: "",
    defaults: new { controller = "Home", action = "Search" }
);

但是它不起作用,我遇到了404错误。

1 个答案:

答案 0 :(得分:1)

当前,您正在遵循默认实现。意思是当您发布数据时,它将提交表单到发布方法,这是正确的。您可以通过两种方法解决。

  1. 使用ajax发布到Url,这样它就不会更改浏览器中的Url。

  2. 使用重定向索引。

      public ActionResult Index()
        {
            if(Session["IndexVM"] != null)
                  return View((HomeViewModel )Session["IndexVM"]);
            return View();
        }
        [HttpPost]
        public ActionResult Search(HomeViewModel vm)
        {
            // your search code
            Session["IndexVM"] = vm;
            return RedirectToAction("Index");
        }