2016-08-01 95 views
0

我试图在我的web应用程序上实现多语言。ASP MVC重定向到Request.UrlReferrer

一切工作正常,但经过一些测试我偶然发现了一些奇怪的交互。

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

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

正如我之前所说的一切似乎工作,但在单个控制器/动作,这个重定向被确认为异步请求。然后破坏代码。我可以用一些“意大利面条”来解决这个问题,但是我想要做的更清洁。

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

+0

您如何知道**确认为异步请求? – Shyju

+0

在调试模式下,它会经过if语句:if(Request.IsAjaxRequest())... – Ales

+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的代码。