我看过一些处理相同问题的帖子,但我找不到任何适合我的解决方案。我的一个"编辑"页面是从其他几个人调用的。但是当我点击"保存"按钮时,我想重定向到上一页,刷新我刚才更改的信息。
Controller中是否有办法返回类似的内容:
@Html.ActionLink("Back to previous page", null, null, null, new { onclick = "history.go(-1);"})
答案 0 :(得分:1)
你可能正在寻找这样的东西:
return Redirect(ControllerContext.HttpContext.Request.UrlReferrer.ToString());
我在之前的项目中使用了类似的方法,其中我有一个带方法的BaseController。
protected ActionResult GoBack()
{
try
{
return Redirect(ControllerContext.HttpContext.Request.UrlReferrer.ToString());
}
catch (Exception ex)
{
TempData["ErrorHeader"] = "Some kind of Error header";
TempData["ErrorMessage"] = "Some kind of Error message";
logger.Error("Add ErrorMessage here",ex);
return RedirectToAction("index", "Home");
}
}
**更新了更好的异常处理
答案 1 :(得分:1)
您可以使用 Request.UrlReferrer 。但是, 不是检测用户来源的可靠方式 。
最简单的方法是在查询字符串中附加 ReturnUrl 。 这很常见,我们通常会在很多网站的登录页面上看到。
[HttpPost]
public ActionResult Edit(ViewModel model, string returnUrl)
{
if (ModelState.IsValid)
{
// Do something
if (!string.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(returnUrl))
return Redirect(returnUrl);
}
// If we got this far, something failed, redisplay form
return View(model);
}
如果您不想在查询字符串中看到ReturnUrl,可以使用 SessionState 。
[HttpPost]
public ActionResult Edit(ViewModel model)
{
if (ModelState.IsValid)
{
// Do something
if (Session["ReturnUrl"] != null)
return Redirect(Session["ReturnUrl"].ToString());
}
// If we got this far, something failed, redisplay form
return View(model);
}
在任何一种方法中,原始页面都有责任提供返回URL。如果你想要一个可靠的机制,这是你必须付出的小代价。