我试图在我的网络应用程序上实现多语言。
一切都运转良好但经过一些测试后,我偶然发现了一些奇怪的互动。
首先让我解释一下我试图做的事情...... 当语言发生变化时,我试图将用户返回到他试图更改Web应用程序语言时访问的页面。这是我过去用来完成的代码。
var returnPage = Request.UrlReferrer;
if (returnPage != null)
{
return Redirect(returnPage.ToString());
}
return RedirectToAction("Index", "Home");
正如我之前所说,一切似乎都有效,但在单个控制器/操作上,此重定向被确认为异步请求。然后打破代码。我可以解决一些" spaghetti"但我想做得更干净。
现在为什么重定向有时会被确认为异步请求?有没有其他方法可以在不使用Redirect和UrlReferrer的情况下将用户返回到上次访问过的页面,这样我可以避免这种交互?
答案 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的代码。