MVC 3 を使用して Web サイトを開発しています。ユーザーがホームページの選択リストで優先言語を選択すると、次のコードがイベントを処理します。選択リストの値を読み取り、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);
}
}