从控制器返回刷新的上一页

时间:2017-03-15 14:52:04

标签: c# asp.net-mvc asp.net-mvc-4

我看过一些处理相同问题的帖子,但我找不到任何适合我的解决方案。我的一个"编辑"页面是从其他几个人调用的。但是当我点击"保存"按钮时,我想重定向到上一页,刷新我刚才更改的信息。

Controller中是否有办法返回类似的内容:

@Html.ActionLink("Back to previous page", null, null, null, new { onclick = "history.go(-1);"})

2 个答案:

答案 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。如果你想要一个可靠的机制,这是你必须付出的小代价。