私はasp.netを使用しており、Webページを変更して誤ってブラウザを閉じると、ユーザーにプロンプトを表示する必要があります。変更があった場合にデータの保存を促す
ページ等「請求を提出してください」
にどのようにしてとは対照的に、(変更が行われた場合にのみ表示されていることを確認して、メッセージボックスを表示することができ、「プロフィールの編集」から何でもかまいませんユーザーが変更を加えた後、変更を元に戻し、ブラウザをシャットダウンする)
私はasp.netを使用しており、Webページを変更して誤ってブラウザを閉じると、ユーザーにプロンプトを表示する必要があります。変更があった場合にデータの保存を促す
ページ等「請求を提出してください」
にどのようにしてとは対照的に、(変更が行われた場合にのみ表示されていることを確認して、メッセージボックスを表示することができ、「プロフィールの編集」から何でもかまいませんユーザーが変更を加えた後、変更を元に戻し、ブラウザをシャットダウンする)
私が過去に行ってきたことは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;
}
<a onclick='showPrompt=false' href='javascript:doX()'/>
$("input").onchange(function(){isDirty=true;});
のようにすることができます。元に戻すのを追跡するには、最後に保存した状態から現在の状態をチェックする関数をisDirtyに置き換えることができます。ページ上の内容を理解せずに触れることは非常に難しいです。それがいくつかのコントロールの場合は、ページの読み込み時に値を取得し、後で比較できるように保存します。複雑なページの場合は、ビューステート全体との正確な比較が必要です。
通常、この種の状況は、最初に変更が加えられたときにブール値をTRUEに設定し、ユーザーが変更を無視して無視することで処理します。データの機密保存を避けようとしているだけの場合、ユーザーは自分の変更を「取り消した」ことを知るのに十分にスマートでなければなりません。
これはjavascriptで行うことができます。 this questionと最初の2つの回答のいずれかを参照してください。
意味があります。それは素晴らしい答えです。どのように私はviewstate(構文私は意味する)と比較するだろうか? – user279521
ポストバック中にviewstateと比較することはできますが、このメソッドを確実に使用することはできません。ブラウザをシャットダウンしたり別のページに移動したりすると、あなたのメモがポストバックになります。私はビューステートクライアントの側を解析しようとすることはお勧めしません。 – JoshBerke