外部JavaScriptファイルへのリンクの方法
ASP.NET 2.0には、埋め込みリソースへ外部からアクセスするための仕組みが用意されています。
- MSDN 『ASP.NET 2.0でのクライアントファイルの処理』
この記事はASP.NET 1.1の頃に書かれたもので、実際のASP.NET 2.0では動作が異なる部分がありますが、この記事を参考にして説明していきます。
背景
従来のASP.NET 1.1では、外部ファイルや画像を利用するカスタムコントロールを配布する場合、指定したフォルダに画像を配置したり、設定ファイルを書き換えたりする必要がありました。これは、アプリケーション配布のコストを増大させ、スマートな方法とは言えないものでした。カスタムコントロールを利用する側としてはDLLの参照設定のみで、コントロールを利用できるようになるのが一つの理想の形といえます。
ASP.NET 2.0では、アセンプリへリソースファイルを埋め込み、それを自動で呼び出すための仕組みが実装されています。この仕組みを利用すれば、DLLの参照設定のみで配布可能なカスタムコントロールを作成できます。
アセンブリへのリソースファイルの埋め込み
アセンブリへのリソースファイルの埋め込みは簡単です。Visual Studio 2005では、以下の手順で行います。
- 埋め込みたい画像・ファイルなどをプロジェクトに追加
- 追加した画像・ファイルを選択しプロパティウィンドウを表示
- ビルドアクションを埋め込まれたリソースに設定
これにより、配布されるDLLに画像やスクリプトファイルなどを埋め込むことができます。
埋め込んだ画像ファイルの表示
さて次は、埋め込んだ画像ファイルを表示するサンプルアプリケーションを作成してみましょう。先ほどの画像の「Image/TreeViewExplorer/Folder.gif」を使用します。
まずは画像ファイルを埋め込みリソースとして使用するための属性をアセンブリに対して定義します。
属性の定義は名前空間の上の部分にコーディングします。同じプロジェクト内であれば、どのファイルで行っても構いません。属性の第1引数には[プロジェクトの既定の名前空間].[フォルダ].[ファイル名]の順でパスを設定します。第2引数にはファイルの種類を示す値を設定します。
この埋め込んだ画像ファイルのURLを取得するためにはPageクラスのClientScriptプロパティのGetWebResourceUrlという名前のメソッドを利用します。
String img = Page.ClientScript.GetWebResourceUrl(
typeof(MovableFolder)
, "Obic.Higuchi.UI.WebForm.Image.TreeViewExplorer.Folder.gif");
これで埋め込んだ画像ファイルへのURLを取得できます。HTMLで書き出すと、
src="WebResource.axd?a=fSystem.Web, Version=1.2.3400.0,Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&
r=WebUIValidation.js&t=631944362841472848"
というようなURLがセットされているはずだとMSDNにはかかれています。しかし、どうやらこれは古い仕様で製品版では若干文字列の書式が異なります。
いずれにせよこの意味不明な文字列が埋め込んだ画像ファイルへのURLを表すことには変わりがありません。詳細は隠蔽したまま話を先へ進めていきましょう。
埋め込んだJavaScriptファイルへのリンク
HTMLファイルでは、JavaScriptファイルへのリンクは以下のように記述されます。
<script language="javascript" src="MyScriptFile.js"
type="text/javascript">
先ほどの埋め込んだ画像ファイルのURLを取得するのと同じ要領でJavaScriptファイルへのリンクURLを取得し、このような書式のHTMLを書き出すようにすれば、埋め込んだJavaScriptファイルが利用できるようになります。
しかし、このような処理は定型的な処理で何度も書くのは煩雑です。そこでASP.NET 2.0ではこの記述を容易にできるようにClientScriptManagerクラスにRegisterClientScriptResourceというメソッドが用意されています。
this.Page.ClientScript.RegisterClientScriptResource( typeof(MovableFolder) , "Obic.Higuchi.UI.WebForm.JavaScript.Prototype.js");
このメソッドを呼び出すと出力されるHTMLファイルには、上記のスクリプトへのリンク用のHTMLが含まれることになります。



Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&