我有一个带有搜索功能的索引页面来显示数据。输入条件(或不带条件)后,我将使用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错误。
答案 0 :(得分:1)
当前,您正在遵循默认实现。意思是当您发布数据时,它将提交表单到发布方法,这是正确的。您可以通过两种方法解决。
使用ajax发布到Url,这样它就不会更改浏览器中的Url。
使用重定向索引。
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");
}