スクリプト参照の動的な割り当て
更新 : 2007 年 11 月
次の例に示すように、大半のシナリオでは、マークアップがスクリプト ファイルを ASP.NET ページに追加する最も簡単な方法です。
<asp:ScriptManager ID="SMgr" runat="server">
<Scripts>
<asp:ScriptReference Path="./Script.js" />
</Scripts>
</asp:ScriptManager>
ただし、スクリプト参照を動的に追加することもできます。この方法により、ページ作成者はスクリプトの追加方法を詳細に制御できます。たとえば、スクリプトを動的に追加することで、必要のない限り大きなスクリプト ライブラリを読み込まないようにしてメモリ リソースを節約することができます。また、ユーザーの種類に応じて読み込むスクリプトのバージョンを変えることもできます。コントロール開発者は、スクリプト コントロールまたはエクステンダ コントロールを作成するときにスクリプトを動的に追加して、そのコントロールをホストするページでスクリプト リソースが自動的に使用されるように設定することができます。
ここでは、ページ作成に関する簡単なシナリオについて説明します。カスタム コントロールへのスクリプト参照の追加については、「クライアント動作と Web サーバー コントロールとを関連付けるエクステンダ コントロールの作成」を参照してください
スクリプト参照では、アセンブリにリソースとして埋め込まれているスクリプト ファイルまたはスクリプトを指定できます。スクリプトはデバッグ バージョンとリテール バージョンで使用できます。次の手順では、これらの各状況でページにスクリプト参照を割り当てる方法を示します。
メモ : |
---|
ScriptManager コントロールを使用して登録するスクリプト ファイルでは、必ず notifyScriptLoaded メソッドを呼び出して、スクリプトの読み込みが完了したことをアプリケーションに通知する必要があります。ただし、アセンブリ ベースのスクリプトでは、多くの場合、このメソッドを呼び出さないようにする必要があります。詳細については、「Sys.Application.notifyScriptLoaded メソッド」を参照してください。 |
スクリプト参照をページに動的に追加するには
ページ上の <asp:ScriptManager> 要素の ID がわからない場合は、ScriptManager コントロールの ScriptManagerGetCurrent() メソッドを呼び出して、コントロールの現在のインスタンスを取得します。ページに ScriptManager コントロールがない場合は、null をテストします。ページに <asp:ScriptManager> 要素があることがわかっており、その ID の値もわかっている場合は、この手順を省略できます。
次の例では、ページに ScriptManager コントロールが存在するかどうかをテストして、現在のインスタンスを取得するか、または新しいインスタンスを作成する方法を示します。
' If there is a ScriptManager on the page, use it. ' If not, throw an exception. Dim SMgr As ScriptManager If ScriptManager.GetCurrent(Page) Is Nothing Then Throw New Exception("ScriptManager not found.") Else : SMgr = ScriptManager.GetCurrent(Page) End If
// If there is a ScriptManager on the page, use it. // If not, throw an exception. ScriptManager Smgr = ScriptManager.GetCurrent(Page); if (Smgr == null) throw new Exception("ScriptManager not found.");
ScriptReference オブジェクトを作成します。
Dim SRef As ScriptReference SRef = New ScriptReference()
ScriptReference SRef = new ScriptReference();
ファイル ベースのスクリプトでは、ScriptManager コントロールの ScriptPath プロパティがスクリプト ファイルの正しい場所に設定されていることがわかっている場合は、ScriptReference インスタンスの Name プロパティをスクリプト ファイル名に設定します。それ以外の場合は、ScriptReference オブジェクトの Path プロパティを、追加するスクリプト ファイルの絶対 URL、相対 URL、またはアプリケーション相対 URL に設定します。
' If you know that Smgr.ScriptPath is correct... SRef.Name = "Script.js" ' Or, to specify an app-relative path... SRef.Path = "~/Scripts/Script.js"
// If you know that Smgr.ScriptPath is correct... SRef.Name = "Script.js"; // Or, to specify an app-relative path... SRef.Path = "~/Scripts/Script.js";
スクリプトがアセンブリの一部である場合は、ScriptReference インスタンスの Name プロパティおよび Assembly プロパティを設定します。
SRef.Name = "Script.js" SRef.Assembly = "ScriptAssembly"
SRef.Name = "Script.js"; SRef.Assembly = "ScriptAssembly";
スクリプトのデバッグ バージョンまたはリリース バージョンを実行するかどうかを指定できます。このモードをページ上のすべてのスクリプトに対して設定するには、ScriptManager コントロールの ScriptMode プロパティを設定します。個々のスクリプトに対してデバッグ モードを設定するには、ScriptReference オブジェクトの ScriptMode プロパティを設定します。
この 2 つの方法の例を次に示します。
' To set ScriptMode for all scripts on the page... SMgr.ScriptMode = ScriptMode.Release 'Or, set ScriptMode for just for the one script... SRef.ScriptMode = ScriptMode.Debug 'If they conflict, the setting on the ScriptReference wins.
// To set ScriptMode for all scripts on the page... Smgr.ScriptMode = ScriptMode.Release; //Or, to set the ScriptMode just for the one script... SRef.ScriptMode = ScriptMode.Debug; //If they conflict, the setting on the ScriptReference wins.
メモ : ScriptReference オブジェクトの Path プロパティが設定されていない場合、ScriptManager コントロールの ScriptMode プロパティは既定で Release に設定されます。ScriptReference オブジェクトの Path プロパティが設定されている場合、ScriptMode プロパティが特定のモードに設定されていない限り、ScriptManager コントロールはデバッグ バージョンまたはリリース バージョンの両方のスクリプトを検索します。
ScriptReference オブジェクトを ScriptManager コントロールの Scripts コレクションに追加します。
SMgr.Scripts.Add(SRef)
Smgr.Scripts.Add(SRef);
参照
概念
クライアント動作と Web サーバー コントロールとを関連付けるエクステンダ コントロールの作成