我正在使用 MVC 3 开发网站,当用户在主页选择列表中选择首选语言时,以下代码将处理该事件。它将读取选择列表的值并将其保存到 cookie。最后,我将提交表单以回发页面。
$(document).ready(function () {
$('#lang').change(function () {
var languageId = $('#lang').val();
document.cookie = 'culture=' + languageId;
$('#postback').submit();
});
});
现在的问题是当我重新加载页面时浏览器不断警告我。
铬 说:
您正在查找的页面使用了您输入的信息。返回该页面可能会导致您重复执行的任何操作。你要继续吗?
火狐说:
要显示此页面,Firefox 必须发送将重复之前执行的任何操作(例如搜索或订单确认)的信息。
是什么原因?以及如何解决?
编辑
public ViewResult Index()
{
int languageId = LocalizationHelper.TryGetCookiesLanguageId();
LoginPageViewModel model = new LoginPageViewModel
{
LanguageId = languageId,
Languages = Mapper.Map<IEnumerable<SvcLanguageList>, IEnumerable<Language>>(new[]{
new SvcLanguageList{ LanguageId = 1, LanguageName="English" },
new SvcLanguageList{ LanguageId = 2, LanguageName="简体中文" },// Simplified Chinese
new SvcLanguageList{ LanguageId = 3, LanguageName="繁體中文" },// Traditional Chinese
})
};
return View(model);
}
编辑 2
我已将我的 jquery 代码更改为以下内容:
$(document).ready(function () {
$('#lang').change(function () {
$('img#loading').show(800);
var culture = $('#lang').val();
$.ajax({
url: '@Url.Action("ChangeCulture", "Account")',
type: 'POST',
data: JSON.stringify({ culture: culture }),
datatype: 'json',
contentType: 'application/json;charset=ascii',
success: function (data) {
window.location = '/';
}
});
});
});
这是我在控制器中的操作
[HttpPost]
public ActionResult ChangeCulture(string culture, string returnUrl)
{
Session["CultureInfo"] = new CultureInfo(culture);
Response.Cookies["culture"].Value = culture;
Response.Cookies["culture"].Expires = DateTime.UtcNow.AddYears(1);
if (Request.IsAjaxRequest())
{
return new EmptyResult();
}
else
{
return Redirect(returnUrl);
}
}