複数の異なるキーワードでオンラインで検索した後、問題の解決策を見つけることができませんでした。
キャンセルする1分前にセッションを更新するようにユーザーに求めるメッセージをポップアップする方法を探すことから始めました。私が使用することにした解決策は、マスターページでjavascriptタイマーを実行し、Masterpage.Page_Load()で呼び出されるようにすることでした。このようにして、ユーザーがページ間を移動するたびに、タイマーがリセットされます。ただし、ユーザーが使用するページの多くにはupdatepanelがあり、非同期で更新されるため、使用している関数に到達していますが、スキップされています(デバッガーによると)。
私が使用している関数は次のとおりです。
ScriptManager.RegisterStartupScript(main, this.GetType(), "callTimer", "callTimer();", true);
この関数は、通常のポストバック、またはマスターページの非同期ポストバック(マスターページの更新パネルでポストバックを実行してタイマーを更新します)では正常に実行されますが、非同期ポストバックではスキップされます。
マスターページの関数PageまたはUpdatePanel、または子ページのupdatepanelを制御するために、いくつかのことを試しました。このコードを子ページにも入れてみましたが、これらの変更によってタイマーがリセットされますが、javascriptcodeが複数回実行され、カウントダウンを表示するラベルをめぐって争います。
私はここで本当に途方に暮れています。考えられる解決策は、startupscriptのコントロールを変更し、そのコードの前に実行されているすべてのjavascriptを再度終了することだと思います。ただし、JavaScript関数をプログラムで終了、キャンセル、または停止する方法を検索しても、有用な結果は得られません。
もう1つの解決策は、マウスの動きでタイマーをリセットすることですが、IE8用に設計しているため、ウィンドウの焦点が合っていない限り、これは機能しません。