asp mvc:指定视图名称不会更改 url
Posted
技术标签:
【中文标题】asp mvc:指定视图名称不会更改 url【英文标题】:asp mvc: specifying a view name does not change the url 【发布时间】:2010-12-31 21:17:23 【问题描述】:我的控制器中有一个用于 HttpPost 的创建操作。在该操作中,我将记录插入数据库,然后返回一个指定不同操作名称的视图,因为我想将用户带到其他地方,例如他们刚刚创建的记录的详细信息视图,然后我传入当前模型,因此我不必重新加载他们刚刚输入的数据。不幸的是,地址栏中的 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);
如何让网址显示“http://myapp/MyController/Details/1”而不是“http://myapp/MyController/Create/1”?有可能吗,还是我必须做重定向?我希望我可以避免重定向...
【问题讨论】:
【参考方案1】:您必须进行重定向才能更改浏览器中的 URL。
你传入的视图名称只是告诉 MVC 要渲染哪个视图。这是您的应用程序的实现细节。
代码如下所示:
[HttpPost]
public ActionResult Create(MyModel model)
//Insert record
...
return RedirectToAction("Details", new id = model.ID );
您想要在此处进行重定向的原因之一是,用户可以点击浏览器中的刷新按钮,而不会出现讨厌的“您想再次发布数据吗”对话框.
这种行为通常称为“Post-Redirect-Get”,或简称为“PRG”。有关 PRG 的更多信息,请参阅 Wikipedia 文章:Post/Redirect/Get
【讨论】:
【参考方案2】:我认为您想使用RedirectToAction()
而不是View()
。看看下面的问题:How to RedirectToAction in ASP.NET MVC without losing request data
【讨论】:
以上是关于asp mvc:指定视图名称不会更改 url的主要内容,如果未能解决你的问题,请参考以下文章