Jer*_*emy 7 asp.net-mvc asp.net-mvc-routing asp.net-mvc-2
我的控制器中有一个用于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);
}
Run Code Online (Sandbox Code Playgroud)
如何让网址显示" http:// myapp/MyController/Details/1 ",而不是" http:// myapp/MyController/Create/1 "?是可能的,还是我必须进行重定向?我希望我可以避免重定向......
您必须进行重定向才能更改浏览器中的 URL。
您传入的视图名称只是告诉 MVC 渲染哪个视图。这是您的应用程序的实现细节。
代码如下所示:
[HttpPost]
public ActionResult Create(MyModel model)
{
//Insert record
...
return RedirectToAction("Details", new { id = model.ID });
}
Run Code Online (Sandbox Code Playgroud)
您想在此处进行重定向的原因之一是,用户可以点击浏览器中的“刷新”按钮,而不会出现令人讨厌的“您想再次发布数据吗”对话框。
这种行为通常称为“Post-Redirect-Get”,或简称为“PRG”。有关 PRG 的更多信息,请参阅维基百科文章:发布/重定向/获取
我认为你想使用RedirectToAction()而不是View(). 看看下面的问题:How to RedirectToAction in ASP.NET MVC without lost request data