WebSurfer's Home

トップ > Blog 1   |   Login
Filter by APML

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

by WebSurfer 20. June 2013 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月にこのブログを立ち上げました。その後 ブログ2 を追加し、ここは ASP.NET 関係のトピックス、ブログ2はそれ以外のトピックスに分けました。

Calendar

<<  January 2021  >>
MoTuWeThFrSaSu
28293031123
45678910
11121314151617
18192021222324
25262728293031
1234567

View posts in large calendar