asp mvc:指定视图名称不会更改url

时间:2010-01-02 23:39:26

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

我的控制器中有一个用于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”?是可能的,还是我必须进行重定向?我希望我能避免重定向......

2 个答案:

答案 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