我的控制器中有一个用于HttpPost的创建操作。在该操作中,我在db中插入记录,然后返回一个指定不同操作名称的视图,因为我想将用户带到其他地方,例如他们刚创建的记录的详细信息视图,然后我传入当前模型,所以我不必重新加载他们刚刚输入的数据。不幸的是,地址栏中的网址仍然显示原始的创建操作。
[HttpPost]
public ActionResult Create(MyModel model)
{
//Insert record
...
//Go to details view, pass the current model
//instead of re-loading from database
return View("Details", model);
}
如何让网址显示“http://myapp/MyController/Details/1”,而不是“http://myapp/MyController/Create/1”?是可能的,还是我必须进行重定向?我希望我能避免重定向......
答案 0 :(得分:3)
您必须重定向才能更改浏览器中的网址。
您传递的视图名称只是告诉MVC要渲染的视图。这是您的应用程序的实现细节。
代码看起来像:
[HttpPost]
public ActionResult Create(MyModel model)
{
//Insert record
...
return RedirectToAction("Details", new { id = model.ID });
}
您希望在此处进行重定向的原因之一是,用户可以点击浏览器中的“刷新”按钮,而不是“你想再次发布数据”这个令人讨厌的对话框
此行为通常称为“Post-Redirect-Get”或简称“PRG”。有关PRG的更多信息,请参阅维基百科文章:Post/Redirect/Get
答案 1 :(得分:2)
我认为您要使用RedirectToAction()
代替View()
。请查看以下问题:How to RedirectToAction in ASP.NET MVC without losing request data