如何redirect到ASP.NET MVC中的上一个操作?

让我们假设我有一些页面

  • some.web/articles/details/5
  • some.web/users/info/bob
  • some.web/foo/bar/7

可以调用一个普通的实用控制器

locale/change/esauthorization/login

如何让这些方法( changelogin )redirect到以前的行动( detailsinfobar ),同时传递给他们( 5bob7 )以前的参数?

简而言之:在另一个控制器中执行操作后,如何redirect到刚访问的页面?

尝试:

 public ActionResult MyNextAction() { return Redirect(Request.UrlReferrer.ToString()); } 

或者,触摸达林所说的,试试这个:

 public ActionResult MyFirstAction() { return RedirectToAction("MyNextAction", new { r = Request.Url.ToString() }); } 

然后:

 public ActionResult MyNextAction() { return Redirect(Request.QueryString["r"]); } 

如果你想从视图中的buttonredirect,你可以使用:

 @Html.ActionLink("Back to previous page", null, null, null, new { href = Request.UrlReferrer}) 

如果你不关心unit testing,那么你可以简单地写:

 return Redirect(ControllerContext.HttpContext.Request.UrlReferrer.ToString()); 

build议如何做到这一点:

  1. 返回url生存的表单的POST请求(和任何失败的validation)
  2. 返回url是从最初的推荐链接中确定的
  3. 而不使用TempData []或其他服务器端状态
  4. 处理直接导航到动作(通过提供默认的redirect)

 public ActionResult Create(string returnUrl) { // If no return url supplied, use referrer url. // Protect against endless loop by checking for empty referrer. if (String.IsNullOrEmpty(returnUrl) && Request.UrlReferrer != null && Request.UrlReferrer.ToString().Length > 0) { return RedirectToAction("Create", new { returnUrl = Request.UrlReferrer.ToString() }); } // Do stuff... MyEntity entity = GetNewEntity(); return View(entity); } [AcceptVerbs(HttpVerbs.Post)] public ActionResult Create(MyEntity entity, string returnUrl) { try { // TODO: add create logic here // If redirect supplied, then do it, otherwise use a default if (!String.IsNullOrEmpty(returnUrl)) return Redirect(returnUrl); else return RedirectToAction("Index"); } catch { return View(); // Reshow this view, with errors } } 

你可以像这样在视图中使用redirect:

 <% if (!String.IsNullOrEmpty(Request.QueryString["returnUrl"])) %> <% { %> <a href="<%= Request.QueryString["returnUrl"] %>">Return</a> <% } %> 

传递一个returnUrl参数(url编码)到更改login操作,并redirect到给定的returnUrl。 您的login操作可能如下所示:

 public ActionResult Login(string returnUrl) { // Do something... return Redirect(returnUrl); } 

在Mvc中使用Java脚本onclick 查看页面中的纯HTML

 <input type="button" value="GO BACK" class="btn btn-primary" onclick="location.href='@Request.UrlReferrer'" /> 

这很好。 希望能帮助别人。

@JuanPieterse已经回答了使用@Html.ActionLink所以如果有可能的话可以用@Url.Action来评论或回答

您可以使用ViewBag.ReturnUrl属性返回到上一页。

要在任何视图中dynamic构buildreturnUrl,请尝试以下操作:

 @{ var formCollection = new FormCollection { new FormCollection(Request.Form), new FormCollection(Request.QueryString) }; var parameters = new RouteValueDictionary(); formCollection.AllKeys .Select(k => new KeyValuePair<string, string>(k, formCollection[k])).ToList() .ForEach(p => parameters.Add(p.Key, p.Value)); } <!-- Option #1 --> @Html.ActionLink("Option #1", "Action", "Controller", parameters, null) <!-- Option #2 --> <a href="/Controller/Action/@object.ID?returnUrl=@Url.Action(ViewContext.RouteData.Values["action"].ToString(), ViewContext.RouteData.Values["controller"].ToString(), parameters)">Option #2</a> <!-- Option #3 --> <a href="@Url.Action("Action", "Controller", new { object.ID, returnUrl = Url.Action(ViewContext.RouteData.Values["action"].ToString(), ViewContext.RouteData.Values["controller"].ToString(), parameters) }, null)">Option #3</a> 

这也适用于布局页面,部分视图和Html助手

相关: MVC3dynamic返回URL (相同,但在任何控制器/操作中)