ASP.NET AJAXの予約関数pageLoad内でページがポストバックされているかどうかを確認する方法
-
09-06-2019 - |
質問
中を確認する方法を探しています pageLoad()
ポストバック/非同期ポストバックのため、または初めてロードされてアクセスされたために、このメソッドがロード イベント中に発生した場合。
これは次のようなものです Page.IsPostback
コードビハインドページ内のプロパティ。
ティア、リッキー
解決
これを行う 1 つの方法は、Application.Init で Application.Load ハンドラーを接続し、実行後にそのハンドラー自体のバインドを解除することです。
Sys.Application.add_init(AppInit);
function AppInit() {
Sys.Application.add_load(RunOnce);
}
function RunOnce() {
// This will only happen once per GET request to the page.
Sys.Application.remove_load(RunOnce);
}
これは Application.Init の後に実行されます。これは、pageLoad が呼び出される前の最後の処理である必要があります。
他のヒント
@ダレン:ご回答ありがとうございます。イベント引数を使用してpageLoadを作成しようとしました ApplicationLoadEventArgs パラメータとして使用します (以下を参照)。ただし、によると これ:
ロード イベントは、非同期ポストバックを含むサーバーへのすべてのポストバックに対して発生します。
ご指摘のとおり、isPartialLoad プロパティはすべてのポストバック シナリオをカバーしているわけではありません。イベント引数に isPostback プロパティも含まれていると便利です。
function pageLoad(sender, arg) {
if (!arg.get_isPartialLoad()) {
//code to be executed only on the first load
}
}
@mmattax:クライアントサイド(JavaScript)から呼び出せるプロパティを探しています。
あなたができることは、 システムアプリケーション クラス。その後、の isPartialLoad プロパティを使用できます。 Sys.ApplicationLoadEventArgs クラス。これにより、非同期ポストバック中かどうかがわかると思います。
ポストバック中かどうかを知るには、サーバー側のコードでそれを処理し、それをクライアントに送信する必要があります。
ポストバック/コールバックの場合、サーバー側で既知の値に設定した非表示の入力があり、JavaScript でその値をチェックできます。
そうは言っても、これに対するクライアント専用のソリューションがあることを本当に願っています。
編集: @mmattax - 彼はクライアント側のソリューション、つまり JavaScript に相当するソリューションを探していると思います。
非同期呼び出し中も Page.IsPostback を使用できます。
アプリケーション.初期化 最初のロード時にのみコードを実行したい場合は、おそらく、このイベントを使用する方が適切です。
@デイブ・ウォード:これは通常は機能します。ただし、コードは動作オブジェクトにイベントをアタッチします。動作オブジェクトの作成は Application.Init 中に行われるため、そのイベントにアタッチすると予測できない動作が発生します。
PostInitイベントがあると良いですね。
@デイブ・ウォード:RunOnce メソッドの使用は完全に機能します。これにより、イベントにアタッチする前にハンドラーがすでに存在するかどうかを最初に確認するという回避策がなくても、私の問題は解決されました。
あなたの回答を承認済みの回答としてマークします。再度、感謝します。
これは、私たちがしばらく使用してきた isPostback に相当する Ajax です。
public static bool isAjaxRequest(System.Web.HttpRequest request)
{//Checks to see if the request is an Ajax request
if (request.ServerVariables["HTTP_X_MICROSOFTAJAX"] != null ||
request.Form["__CALLBACKID"] != null)
return true;
else
return false;
}