如何redirect到ASP.NET MVC中的上一个操作?
让我们假设我有一些页面
some.web/articles/details/5
-
some.web/users/info/bob
-
some.web/foo/bar/7
可以调用一个普通的实用控制器
locale/change/es
或authorization/login
如何让这些方法( change
, login
)redirect到以前的行动( details
, info
, bar
),同时传递给他们( 5
, bob
, 7
)以前的参数?
简而言之:在另一个控制器中执行操作后,如何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议如何做到这一点:
- 返回url生存的表单的POST请求(和任何失败的validation)
- 返回url是从最初的推荐链接中确定的
- 而不使用TempData []或其他服务器端状态
- 处理直接导航到动作(通过提供默认的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 (相同,但在任何控制器/操作中)
- ASP.NET MVC CMS数据库的dynamic路由
- PHP应用程序URL路由
- AngularJS – 我如何做一个完整的页面加载redirect?
- 在Rails 3中,当资源创build操作失败并调用render:new时,为什么URL必须更改为资源的索引url?
- 如何在laravel 5中获取当前的路由名称?
- 如何在Symfony布局中获取_localevariables?
- Laravel – 对所有路由使用(:any?)通配符?
- Web API路由 – api / {controller} / {action} / {id}“function障碍”api / {controller} / {id}
- 什么algorithm在地图上计算从点A到点B的方向?