ページが読み込まれると、page_load イベントを使用して値を 1 に設定します。C# を使用する asp.net では、ユーザーがそのページから移動するたびに値を null に設定したいと考えています。Page_unload は、ページ自体が読み込まれるときに実行されるため、役に立ちません。どのイベントを使用すればよいですか?
5 に答える
ページを離れてもサーバーへのヒットは必要ないため、たとえばユーザーがブラウザーを閉じたときに C# コードの実行を保証する方法はありません。
JavaScript を使用しonbeforeunload
て、ユーザーに警告メッセージを表示できます。このメッセージをどれだけカスタマイズできるかは、使用しているブラウザーによって異なります (ネタバレ注意: FireFox では、このメッセージをカスタマイズできません)。明らかに、これには、ユーザーが JavaScript を有効にしている必要があります。
イベントからサーバーにポストバックする JavaScript をいくつか作成できるかもしれませんがonbeforeunload
、目的に合わせて機能するかどうかを確認するには、それを試してみる必要があります。
C# で実行する場合は、 Session_OnEndイベントを使用して変数を設定することもできます。
ASP.NET には、ユーザー セッションの管理に役立つ 2 つのイベントが用意されています。Session_OnStart イベントは、新しいセッションが開始されたときに発生し、Session_OnEnd イベントは、セッションが中止または期限切れになったときに発生します。セッション イベントは、ASP.NET アプリケーションの Global.asax ファイルで指定されます。
EDIT @ jadarnel27のコメントのおかげで、私は行ってこれをチェックしました。実際、ユーザーがブラウザを閉じてもセッションは終了しません。ここでいくつかの優れた議論を見つけました:ブラウザまたはタブが閉じられたときにセッションを閉じる/殺す
そのページで変数を設定しようとしているようです。移動して戻ってくると、page_load が再び起動し、変数が再び 1 に設定されます。「たとえば、ユーザーがブラウザーを閉じたときに、C# コードの実行を保証する方法はありません」と言われていました。
データベースに何かがあった場合、または変更する必要があるものがあれば、リダイレクトを行うボタンのクリック イベントに入れるだけです。永続化する必要がある値があった場合は、それを Session に入れて、リダイレクトの前に更新することができます (ただし、何を達成しようとしているかによっては、Session よりも優れた解決策があるかもしれません。
protected void Button1_Click(object sender, EventArgs e)
{
//change your value here
Response.Redirect("MyPage");
}
全体の構造を見ると、ページを要求すると、ページがメモリに読み込まれ、すべてのコントロールがレンダリングされるため、ページのアンロードにサーバー側イベントが発生する可能性がないことがわかります。
ただし、ページ内のリンクをクリックすると、リダイレクトのみが行われ、クライアント側で行われます。したがって、サーバーはそれを認識していません。新しいページが要求されていることがわかりました。前のページはすでにメモリからアンロードされているため
したがって、ソリューションはクライアント側でなければなりません。
または、完全にサーバー側のソリューションが必要な場合は、読み込まれたページを保存するためのセッション ストレージを探します。次に、次のページの page_load イベントで、最後に読み込まれたページがこれだったのか、それとも新しいページだったのかを確認できます。これはあなたの質問には答えませんが、新しいページが読み込まれたときにのみページのアンロード イベントが発生するためです。
最善の策は、ユーザーがページを閉じたときにクライアント側から Ajax クエリを起動することです。ただし、実際に発火するという保証はありません。