0

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);
        }
    }
4

2 に答える 2

1

POSTフォームを送信すると、前のページの内容が編集された新しいページにリダイレクトされます。POSTそのページは、編集されたフォームの内容がなければ存在しません。したがって、そのページに戻ろうとすると、同じデータをそこに戻す必要がありますPOST

POSTこれを解決するには、おそらく Ajax リクエストを使用して、そのページへの ing を克服する必要があります。

于 2012-05-03T14:45:08.753 に答える
0

あなたのコントローラー機能は何をしていますか?戻るだけの場合は、そのページに留まりたい場合にView戻ることができます。RedirectToAction

于 2012-05-03T14:46:49.253 に答える