0

ページが読み込まれると、page_load イベントを使用して値を 1 に設定します。C# を使用する asp.net では、ユーザーがそのページから移動するたびに値を null に設定したいと考えています。Page_unload は、ページ自体が読み込まれるときに実行されるため、役に立ちません。どのイベントを使用すればよいですか?

4

5 に答える 5

3

ページを離れてもサーバーへのヒットは必要ないため、たとえばユーザーがブラウザーを閉じたときに C# コードの実行を保証する方法はありません。

JavaScript を使用onbeforeunloadて、ユーザーに警告メッセージを表示できます。このメッセージをどれだけカスタマイズできるかは、使用しているブラウザーによって異なります (ネタバレ注意: FireFox では、このメッセージをカスタマイズできません)。明らかに、これには、ユーザーが JavaScript を有効にしている必要があります。

イベントからサーバーにポストバックする JavaScript をいくつか作成できるかもしれませんがonbeforeunload、目的に合わせて機能するかどうかを確認するには、それを試してみる必要があります。

于 2013-05-09T16:19:23.570 に答える
1

C# で実行する場合は、 Session_OnEndイベントを使用して変数を設定することもできます。

ASP.NET には、ユーザー セッションの管理に役立つ 2 つのイベントが用意されています。Session_OnStart イベントは、新しいセッションが開始されたときに発生し、Session_OnEnd イベントは、セッションが中止または期限切れになったときに発生します。セッション イベントは、ASP.NET アプリケーションの Global.asax ファイルで指定されます。

EDIT @ jadarnel27のコメントのおかげで、私は行ってこれをチェックしました。実際、ユーザーがブラウザを閉じてもセッションは終了しません。ここでいくつかの優れた議論を見つけました:ブラウザまたはタブが閉じられたときにセッションを閉じる/殺す

于 2013-05-09T16:28:58.463 に答える
0

そのページで変数を設定しようとしているようです。移動して戻ってくると、page_load が再び起動し、変数が再び 1 に設定されます。「たとえば、ユーザーがブラウザーを閉じたときに、C# コードの実行を保証する方法はありません」と言われていました。

データベースに何かがあった場合、または変更する必要があるものがあれば、リダイレクトを行うボタンのクリック イベントに入れるだけです。永続化する必要がある値があった場合は、それを Session に入れて、リダイレクトの前に更新することができます (ただし、何を達成しようとしているかによっては、Session よりも優れた解決策があるかもしれません。

protected void Button1_Click(object sender, EventArgs e)
{
    //change your value here
    Response.Redirect("MyPage");
}
于 2013-05-09T16:28:35.113 に答える
0

全体の構造を見ると、ページを要求すると、ページがメモリに読み込まれ、すべてのコントロールがレンダリングされるため、ページのアンロードにサーバー側イベントが発生する可能性がないことがわかります。

ただし、ページ内のリンクをクリックすると、リダイレクトのみが行われ、クライアント側で行われます。したがって、サーバーはそれを認識していません。新しいページが要求されていることがわかりました。前のページはすでにメモリからアンロードされているため

したがって、ソリューションはクライアント側でなければなりません。
または、完全にサーバー側のソリューションが必要な場合は、読み込まれたページを保存するためのセッション ストレージを探します。次に、次のページの page_load イベントで、最後に読み込まれたページがこれだったのか、それとも新しいページだったのかを確認できます。これはあなたの質問には答えませんが、新しいページが読み込まれたときにのみページのアンロード イベントが発生するためです。

于 2013-05-09T16:20:26.530 に答える
0

最善の策は、ユーザーがページを閉じたときにクライアント側から Ajax クエリを起動することです。ただし、実際に発火するという保証はありません。

于 2013-05-09T16:20:53.643 に答える