ASP MVC重定向到Request.UrlReferrer

时间:2016-08-01 23:20:01

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

我试图在我的网络应用程序上实现多语言。

一切都运转良好但经过一些测试后,我偶然发现了一些奇怪的互动。

首先让我解释一下我试图做的事情...... 当语言发生变化时,我试图将用户返回到他试图更改Web应用程序语言时访问的页面。这是我过去用来完成的代码。

var returnPage = Request.UrlReferrer;
        if (returnPage != null)
        {
            return Redirect(returnPage.ToString());
        }
        return RedirectToAction("Index", "Home");

正如我之前所说,一切似乎都有效,但在单个控制器/操作上,此重定向被确认为异步请求。然后打破代码。我可以解决一些" spaghetti"但我想做得更干净。

现在为什么重定向有时会被确认为异步请求?有没有其他方法可以在不使用Redirect和UrlReferrer的情况下将用户返回到上次访问过的页面,这样我可以避免这种交互?

1 个答案:

答案 0 :(得分:1)

如下所示......

控制器:

  // after language is changed    
  if (Request.IsAjaxRequest()) {
      return Json(new {
        Success: true,
        ReturnPage = returnPage ?? new UrlHelper(Request.RequestContext).Action("Index", "Home");
      });
    }
    else {
      if (returnPage != null)
      {
        return Redirect(returnPage.ToString());
      }
      return RedirectToAction("Index", "Home");
    }

查看:

$.ajax({
    url: 'Settings/ChangeLanguage',
    type: 'POST',
    data: {lan: 'en'},
    success: function(result) {
        if (result.Success) {
            window.location = result.ReturnPage;
        }
    }
});

这样,控制器中的代码可以用于AJAX和非AJAX请求。但是如果你只是用AJAX调用它,你可能只想使用返回json的代码。