これはよくある質問のようですが、検索で何も返されません。ASPでページをアンロードするのがポストバックであるかどうかを確認する方法
ページをアンロードする前に実行する次のコードがあります。アンロードがポストバックの場合、私はユーザーに私の警告を発したくありませんが、ポストバックと例えば、別のページにナビゲートするユーザ。
// This is executed before the page actually unloads
$(window).bind("beforeunload", function() {
if (prompt) {
//prompt
return true;
}
else {
//reset our prompt variable
prompt = true;
}
})
コードの背後にあるスクリプトを実行している場合、つまりPage.IsPostBackがプロンプトを設定している場合、プロンプトはオプションではありません。
アイデア?
EDIT:
function DoNotPrompt() {
prompt = false;
}
は、私は、ユーザーが戻ってポストにつながる何かができるすべてのコントロールにこれを追加:ここで
は私が終わったソリューションです。
OnClientClick="DoNotPrompt()
次に、ユーザーが実際にページから離れている、つまりポストバックではない場合は、「beforeunload」の文字列が返されます。
また、このコードを使用する必要がありました。 var magicInput = document.getElementById( '__ EVENTTARGET');
if (magicInput && magicInput.value) {
// the page is being posted back by an ASP control
prompt = false;
}
私がリストボックスであったカスタムユーザーコントロールを持っていて、上記のメソッドを追加できなかった理由です。これを使用してそのイベントを捕まえ、フラグをfalseに設定します。
最も優秀な解決策ではありません。
おかげで、 マイケル
@Aristos magicInputは、DOMに見つからなかった場合は 'null'(偽)になり、見つかった場合は空の文字列(偽)になりますが、設定されていません。ステートメントは、隠れた入力が存在し、値を持っているかどうかをチェックします。 – jbabey
私はそのアイディアを考えています。私はそれをテストしていないと思いますが、すべてのケースで__EVENTTARGETがポストバックの前に変更されていることを確認する必要があります。ここでは、__doPostBackが呼び出されたときに変更されたことがわかります。 – Aristos
私はこれを試しましたが、何らかの理由ですべてのポストバックをキャプチャしていないと言っています。ユーザーがグリッド内の行を編集する場合など。 –