我有一个bilangual MVC 3应用程序。我使用下拉列表通过将下拉列表的值保存到cookie和会话中来更改语言。问题是当我发布它时,它只适用于IE。以下是我的代码。注意:该网站将被重新加载,当我关闭firefox或chrome并推迟它时,语言已被更改,但如果我不关闭FF或chrome,则不会发生任何事情。非常感谢您的帮助。 我使用$ .get,$ .post各种组合。
JavaScript代码:
$(function () {
$('#languagesDiv select').change(function () {
var myvalue = $(this).val();
$.ajax({
type: "POST",
dataType: "xml",
url: "/Language/SetLanguage",
data: { code: myvalue },
success: function (data) {
},
error: function (xhr, textStatus, errorThrown) {
}
});
// @* $.post('@Url.Action("SetLanguage", "Language")', { code: $(this).val() },
// function (result) {
// }
// );*@
var myDate = new Date();
myDate.setDate(myDate.getDate() + 21);
$.cookie('MyData', $(this).val(), { path: '/', expires: myDate });
//window.location.reload();
window.location.href = '/News/Index';
});
});
C#代码:
//tested with and without [httppost]
public void SetLanguage(string code)
{
if (Session["MyCulture"] != null && Convert.ToString(Session["MyCulture"]) != code )
{
Session["MyCulture"] = code;
HttpCookie aCookie = Request.Cookies["MyData"]; // new HttpCookie("MyData");
aCookie.Value = code;
//HttpCookie aCookie = Request.Cookies["LangCookie"];
aCookie.Expires = System.DateTime.Now.AddDays(21);
Response.Cookies.Add(aCookie);
//Response.AppendCookie(aCookie);
}
//return RedirectToAction("Index", "News");
}
再次感谢你。
答案 0 :(得分:3)
我看到的问题(后端可能有其他人)是您的AJAX请求可能无法在其他/更新的浏览器中完成。当你这样称呼时:
window.location.href = '/News/Index';
...你告诉浏览器离开,这意味着立即去那里,无论先前的AJAX请求是否已完成(浏览器可能会提前终止请求并继续前进)。
相反,您应该在请求完成后重定向并在success
处理程序中重定向,如下所示:
$(function () {
$('#languagesDiv select').change(function () {
var myvalue = $(this).val();
$.ajax({
type: "POST",
dataType: "xml",
url: "/Language/SetLanguage",
data: { code: myvalue },
success: function (data) {
var myDate = new Date();
myDate.setDate(myDate.getDate() + 21);
$.cookie('MyData', $(this).val(), { path: '/', expires: myDate });
window.location.href = '/News/Index';
}
});
});
});
这样,只有在成功发出更改语言请求后,您才会告诉用户更改网页。