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的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC Url.Action 和路由名称值

Asp.net MVC 视图

在 MVC5 中添加视图

ASP.NET MVC 部分视图:输入名称前缀

ASP.NET MVC - 操作名称如何影响 url?

asp.net mvc 3 和动态视图生成