WebSurfer's Home

トップ > Blog 1   |   ログイン
APMLフィルター

リソース埋込カスタムコントロールの継承

by WebSurfer 2013年6月20日 13:15

先の記事「リソース埋め込みカスタムコントロール」で、画像、html ファイル、スクリプトファイル、css ファイルなどのリソースをアセンブリに埋め込んだカスタムコントロールの作り方を説明しました。

このようなリソース埋め込みカスタムコントロールを継承したコントロールを作って使う場合の注意点を書きます。

アセンブリに埋め込んだリソースは、GetWebResourceUrl メソッド によって URL 参照を取得して使用しますが、注意すべきはこのメソッドの第一引数 type(リソースの型)です。

先の記事の MsButton.cs のコードでは this.GetType() でリソースの型を取得していますが、このコントロールを継承した場合 this は継承先になり、ASP.NET は継承先からリソースを探すので、リソースが見つからないという結果になります。

この問題を解決するには this.GetType() に代えて typeof 演算子を利用します。先の記事の MsButton.cs のコードでは以下のようにします。

protected override void CreateChildControls()
{
  ClientScriptManager cs = Page.ClientScript;

  // このコントロールを継承する場合 this.GetType() ではダメ
  // this は継承先になり、結果、リソースが見つからない。
  //Type rsType = this.GetType();

  Type rsType = typeof(MsButton);

  // css への参照を <head></head> に配置
  HtmlLink css = new HtmlLink();
  css.Href = 
    cs.GetWebResourceUrl(rsType, "SimpleControl.MyStylesheet.css");

  // ・・・中略・・・
}

上に紹介した MSDN ライブラリのサンプルコードでも typeof 演算子を使っていますね。

Tags:

Web Custom Control

About this blog

2010年5月にこのブログを立ち上げました。主に ASP.NET Web アプリ関係の記事です。

Calendar

<<  2024年4月  >>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

View posts in large calendar