読者です 読者をやめる 読者になる 読者になる

きよくらの備忘録

「三日坊主と呼ばせない!日記」改め。主にソフトウェア開発関連の話題。

ScriptManagerProxy根本的に誤解していたっぽい。

マスターページにScriptManagerを配置した際、コンテンツページでAJAXのコントロールを使う場合でも必ずしもScriptManagerProxyを配置する必要はないんですね。今日、初めて認識しました。


ASP.NET AJAX関係の書籍とかWebページ等のドキュメントは多少見たつもりだけれど、そのあたりはいい加減に斜め読みだけしてやってたので、『マスターページにScriptManagerを置いたら、コンテンツページには須らくしてScriptManagerProxyを配置すべし』という呪文みたいに思いこんでおりました。


反省。


ただ、以下の参考になりそうなドキュメントを見ても、どういう場合に使うべきかの具体例がピンと来ない私が居たり。

To use an UpdatePanel control in a master page, you must decide how to include the ScriptManager control. If you include the ScriptManager control on the master page, it can act as the ScriptManager control for all content pages. (If you want to register scripts or services declaratively in a content page, you can add a ScriptManagerProxy control to that content page.)

ASP.NET AJAX > Overview > The UpdatePanel and UpdateProgress Controls > UpdatePanel Control Overview

ScriptManagerProxy コントロールを使用すると、ScriptManager コントロールによって定義されているスクリプトとサービスのコレクションに、さらにスクリプトとサービスを追加することができます。特定の ScriptManager コントロールが含まれるすべてのページに特定のスクリプトとサービスを組み込む必要がない場合、これらのスクリプトとサービスを ScriptManager コントロールから削除できます。次に、ScriptManagerProxy コントロールを使用して、それらを個々のページに追加します。

ScriptManagerProxy クラス (System.Web.UI)


あれかな。スクリプトやサービスをScriptManagerに設定する際に、すべてのページで必要ならマスターページ上(デザイナからもでコードからでも)でやればいいし、そうでないならコンテンツページ上にScriptManagerProxyを配置してそこでやりなさい」、ってことなのだろうか。


ただ、マスターページでScriptManager自体をプロパティとして公開してやればコンテンツページからも透過的にアクセスできそうなので*1、どうにでもなりそうな気がする……が、それは僕がそんな凝った(?)使い方をまだしていないので、想像できてないだけなんだろう。きっと。


まだまだ触り始めたばかりなので当然だけれども、わからないことが多すぎる。精進せねば。

*1:IsAsyncPostBackプロパティについては僕はやっている。だって、ScriptManagerProxyにないんだもの(^^;