2012-05-03 8 views
0

MVC 3を使用してWebサイトを開発しています。ユーザーがホームページ選択リストで言語を選択すると、次のコードでイベントが処理されます。選択リストの値を読み取り、それをクッキーに保存します。最後に、ページをポストバックするためにフォームを送信します。jQueryフォームブラウザで警告を送信

$(document).ready(function() { 
    $('#lang').change(function() { 

     var languageId = $('#lang').val(); 

     document.cookie = 'culture=' + languageId; 

     $('#postback').submit(); 
    }); 
}); 

ページをリロードすると、ブラウザの問題が表示されます。

クロム言う:

あなたが入力した情報を使用しているページ。 そのページに戻ると、繰り返し実行されたアクションが発生する可能性があります。 続行しますか?

Firefoxは言う:

このページを表示するには、Firefoxは 以前行った(そのような検索や注文確認など)任意のアクション を繰り返すことになりますという情報を送信する必要があります。

何故ですか?どのようにそれを解決するには?

EDIT

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

EDIT 2

私はfollwingに私の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 = '/'; 
      } 
     }); 
    }); 
}); 

、ここでは、コントローラ

の私の行動であります
+0

$( '#postback')の前に '$(" postback ')。reset() 'を実行してみてください(あなたが興味を持っているのはクッキーだけです) – Rodolfo

答えて

1

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

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

+0

As – Eli

+0

Ajaxのポイントは、あなたがレスポンスを非同期にしてから自分でページを更新できるようにすることです。 'location'を使うことはあなた自身の選択です。 – Eli

0

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

関連する問題