2017-10-21 7 views
0

コードビハインドからJavaScriptコードをトリガするために使用されるコードスニペット(C#のブラウザの戻るボタンは、サーバーによって送信された保存されたページ状態を表示しますが、JavaScriptを使用して行われたDOMの変更は保存されません。

int returnValue = SaveStudent("John", "XII"); // SaveStudent() is a C# function that saves the student details in DB and returns studentId. 
hdnStudentId = returnValue ; // hdnStudentId is a hidden-field control 
ScriptManager.RegisterStartupScript(this, this.GetType(), 
          "ShowStudent", "showStudentDetails();",true); 

"showStudentDetails()" JavaScriptメソッドの定義がようである:ここでは

function showStudentDetails(){ 
    If($('[id*=hdnStudentId]').val() > 0){ 
     // show the popup 
    } 
} 

は、問題の説明です:

  • Webページ 'WebPage1.APSX'では、DBにデータを保存した後、ScriptManagerクラス(前述)を使用して ブートストラップポップアップを表示します。

  • ここでは、隠しフィールド変数の値を、DBに挿入された挿入されたrowid (12345など)に設定します。

  • ScriptManagerクラス は、スクリプトをDOMに正常に登録し、ポップアップを表示します。

  • その後、私はここのhidden-field変数を-1にリセットします。 ポップアップで、私は別のページにリダイレクトするボタンコントロールを持っています 'WebPage1.APSX'。

    $( '[id * = hdnStudentId]')。val( ' - 1');

  • ユーザーが「ブラウザの戻るボタン」をクリックすると、サーバー側のコードにヒットせず、 はサーバーによって送信された前のページのインスタンスに基づいてUIをレンダリングします。

  • これは、サーバーから送信されたページの以前のインスタンスであるため、隠しフィールド 変数が「12345」に設定の代わります-1(必ず、なぜ、我々はすでに に-1値をリセットしなかった)と表示もう一度ポップアップ。

要件:ユーザーが「ブラウザのバックボタン」をクリックしたときに、我々はヴァル((つまり$(「[ID * = hdnStudentId]」)だけでなくDOMで以前に操作されたデータを覚えておく必要があります'-1');)ブラウザのバックボタンクリックでポップアップを表示しないようにします。

+0

こんにちはフォークス。私はあなたに感謝するよ! –

答えて

1

あなたは何のサーバが関与していない歴史の中で、あなたのページの状態を保存するためにチェックアウトブラウザの履歴APIに必要な、ここhttps://developer.mozilla.org/en-US/docs/Web/API/History_API

DOM windowオブジェクトが historyオブジェクトを介してブラウザの履歴へのアクセスを提供するMDNドキュメントです。 をHTML5で始まる - - それは、ユーザーの歴史を前後に移動するだけでなく、 ましょう便利なメソッドとプロパティを公開履歴スタック

ともAjaxのナビゲーションの例の内容を操作しますhttps://developer.mozilla.org/en-US/docs/Web/API/History_API/Example。助けることを望む!

+0

ありがとうございました。本当に良いアイデアですが、複数のWebページ(約10個の.aspxページ)で実装している間に、いくつかの問題に直面しています。 それで、私はマスターページに保管しようとしました。しかし、前のページを取得する際に問題に直面した。 **問題:**ページリンクをクリックすると、前のページは「前のページ」ですが、ページの更新時にも前のページが読み込まれます。また、ブラウザに表示されるURLも誤って変わります。 マスターページのコードスニペットは、「この返答は長すぎます」という次のコメントに配置されます。 –

+0

マスターページのコードスニペットを次に示します。 コードは期待通りに機能しないため、コメントアウトされています。 //history.pushState(null、null、document.referrer); window.addEventListener( 'popstate'、function(event){ //history.pushState(null、null、document.referrer); //history.pushState(null、null、window.location.href); アラート(「こんにちは、あなたはブラウザの戻るボタンをクリックしました」); }); –

+0

あなたは 'pushState()'への動的参照を渡すことによると思われましたが、 'document.referrer'や' window.location.href'のような動的引数を渡すことはお勧めしません。 'var stateObj = {id:hdnStudentId};のようにするのが良いと思います。history.pushState(stateObj、null、 "#popup"); URLの後の ''# 'はJSが扱うクライアント側のURLの一般的なパターンです。あなたのイベントリスナーでは 'showStudentDetails(stateObj.id)'関数を呼び出すことができます。これは引数を受け入れるように関数を拡張することを意味します。 –

0

ありがとう@サルース..私はあなたのアドバイスに従って..そして最後に、次のコードスニペットが私のために働いた.. 私は '履歴を使用しました。pushState(); 'ポップアップを表示した直後のメソッド:

$('#divStudentDetails').modal('show'); 
history.pushState(null, null, ""); 
関連する問題