ASP.NETのUpdatePanelによる非同期ポストバックの実体

https://www.atmarkit.co.jp/fdotnet/dotnettips/672aspajaxasyncpost/aspajaxasyncpost.html
UpdatePanelでは画面の一部のみのレンダリングを可能とする。
リクエストとしては通常のポストバックと同等の画面全体の情報やビューステート情報を含むものが送信されてサーバ側で通常のポストバックと同じ処理が行われる。
サーバの処理後は、レンダリングが必要なUpdatePanelで指定された部分についてのみのレンダリング結果がブラウザに送られて、ブラウザ側でUpdatePanelの中身を置き換える。
……という説明にはなっているがアップロードされるファイルは例外で、fileUploadコントロールのPostedFileプロパティが空になるといった違いはあるようなので、問題があった場合はまず疑ってみるべきだと思う。


前提

Form内にScriptManagerコントロールが存在しないとUpdatePanelは使えない。

UpdateModeプロパティ

・Always:Form内の全UpdatePanelが更新される(既定値)
・Conditional:非同期ポストバックを引き起こしたパネルのみが更新される

UpdatePanel外のイベントで非同期ポストバックをリクエストする方法

基本的にUpdatePanelは、その子の要素のイベントでしか非同期ポストバックをしない。
しかし以下方法でパネル外のイベントで非同期ポストバックが可能。
・Trigger子要素を設定する
・scriptManager1.RegisterAsyncPostBackControl(control) で設定する

再表示後のメッセージ表示など

`clientScript.RegisterStartupScript(Me.GetType(), "key", script)`は、画面全体のポストバックに含めるスクリプトの設定なので、非同期ポストバック後にはこれで設定したスクリプトは実行されない。
以下のコードで実行できる。

ScriptManager.RegisterClientScriptBlock(Me.Page, Me.GetType(), "key", script, False)



ちなみにUpdatePanelは、UpdateProgress要素でポストバック~結果の再描画までの間だけ「読み込み中」などのローディング表示をすることができる。