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

Asp.net mvc asp mvc:指定视图名称不会更改url,asp.net-mvc,asp.net-mvc-2,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc 2,Asp.net Mvc Routing,我的控制器中有一个创建HttpPost的操作。在该操作中,我在db中插入记录,然后返回一个指定不同操作名称的视图,因为我想将用户带到其他地方,比如他们刚刚创建的记录的详细视图,并且我传入当前模型,这样我就不必重新加载他们刚刚输入的数据。不幸的是,地址栏中的url仍然显示原始的创建操作 [HttpPost] public ActionResult Create(MyModel model) { //Insert record ... //Go to details view

我的控制器中有一个创建HttpPost的操作。在该操作中,我在db中插入记录,然后返回一个指定不同操作名称的视图,因为我想将用户带到其他地方,比如他们刚刚创建的记录的详细视图,并且我传入当前模型,这样我就不必重新加载他们刚刚输入的数据。不幸的是,地址栏中的url仍然显示原始的创建操作

[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);
}

如何使url显示“”而不是“”?有可能吗,或者我必须进行重定向吗?我希望我可以避免重定向…

您必须执行重定向才能更改浏览器中的URL

传入的视图名称只是告诉MVC要渲染哪个视图。这是应用程序的实现细节

代码将类似于:

[HttpPost] 
public ActionResult Create(MyModel model) 
{ 
    //Insert record 
    ... 
    return RedirectToAction("Details", new { id = model.ID }); 
} 
您希望在此处执行重定向的原因之一是,用户可以点击浏览器中的刷新按钮,而不会出现令人讨厌的“是否要再次发布数据”对话框


这种行为通常被称为“Post-Redirect-Get”,简称“PRG”。有关PRG的更多信息,请参阅Wikipedia文章:

我认为您希望使用
重定向到操作()
而不是
查看()
。请看以下问题: