2010-12-10 20 views
0

私はasp.netを使用しており、Webページを変更して誤ってブラウザを閉じると、ユーザーにプロンプ​​トを表示する必要があります。変更があった場合にデータの保存を促す

ページ等「請求を提出してください」

にどのようにしてとは対照的に、(変更が行われた場合にのみ表示されていることを確認して、メッセージボックスを表示することができ、「プロフィールの編集」から何でもかまいませんユーザーが変更を加えた後、変更を元に戻し、ブラウザをシャットダウンする)

答えて

1

私が過去に行ってきたことはonbeforeunloadイベント時には、このチェックを行い、いくつかのクライアント側のスクリプトを使用している....

var showPrompt=true; 
var isDirty=false; 
var hidePopup=false; 

    function onBeforeUnload() { 
     if (showPrompt) { 
      if (isDirty) { 
       if (hidePopup || confirm("Click ok to save your changes or click cancel to discard your changes.")) { 
        doSave(); 
       } 
      } 
     } 
     showPrompt = true; 
     hidePopup = false; 
    } 
  • アンカー上のあなたのクリックShowPromptをfalseに設定することができますあなたがページからあなたを遠ざけることはありません。たとえば、<a onclick='showPrompt=false' href='javascript:doX()'/>
  • isDirtyを使用して、何かを保存する必要があるかどうかを追跡できます。たとえば、$("input").onchange(function(){isDirty=true;});のようにすることができます。元に戻すのを追跡するには、最後に保存した状態から現在の状態をチェックする関数をisDirtyに置き換えることができます。
  • HidePopupでは、ユーザーに確認せずに強制的に保存できます。
1

ページ上の内容を理解せずに触れることは非常に難しいです。それがいくつかのコントロールの場合は、ページの読み込み時に値を取得し、後で比較できるように保存します。複雑なページの場合は、ビューステート全体との正確な比較が必要です。

通常、この種の状況は、最初に変更が加えられたときにブール値をTRUEに設定し、ユーザーが変更を無視して無視することで処理します。データの機密保存を避けようとしているだけの場合、ユーザーは自分の変更を「取り消した」ことを知るのに十分にスマートでなければなりません。

+0

意味があります。それは素晴らしい答えです。どのように私はviewstate(構文私は意味する)と比較するだろうか? – user279521

+0

ポストバック中にviewstateと比較することはできますが、このメソッドを確実に使用することはできません。ブラウザをシャットダウンしたり別のページに移動したりすると、あなたのメモがポストバックになります。私はビューステートクライアントの側を解析しようとすることはお勧めしません。 – JoshBerke

1

これはjavascriptで行うことができます。 this questionと最初の2つの回答のいずれかを参照してください。

関連する問題