ASP.NET でマスターページ機能を使う際、クライアントページ側からマスターページ側のオブジェクトを扱う方法

いつもシェアしていただいてありがとうございます。これからも「ちょいとお役立ちして嬉しくなる」記事の配信を目指しています。ポチッと↓のボタンからシェアしてください。

ASP.NET 2.0 からは、マスター・ページと言う、共通のフレームを利用する機能が追加されました。
共通のフレーム側をマスターページ、各機能毎のページをコンテンツページと呼ぶのですが、コンテンツページのプログラムからマスターページ側のオブジェクトを参照したい場合などにどうすればよいかについて、メモしておきます。

*

Page.Master プロパティを使う方法

もっとも簡単な方法は、Page オブジェクトにある Master プロパティを利用することです。
読み取り専用の MasterPage オブジェクトを返すこのプロパティは、現在のコンテンツページが埋め込まれているマスターページを返します。

例えば、次の様なマスターページがあるとしましょう。
Literal オブジェクトがあるのがポイントです。

[code lang=’html’]





[/code]

このページの「Literal1」に、クライアント側プログラムでアクセスするには、次の様に書きます。

[code lang=’c#’] (Page.Master.FindControl(“Literal1”) as Literal).Text = “なんちゃら”
[/code]

FindControl メソッドを利用してオブジェクトを検索し、as 演算子によって Label クラス型へ参照変換を行っています。

Master プロパティは読み取り専用ですが、戻り値である MasterPage オブジェクトのメンバは、操作可能です。

@MasterType ディレクティブを利用する方法

上記の方法は、マスターページ側のオブジェクトにアクセスする方法ですが、今度は直接マスターページ側が持つメンバを参照したい場合についてです。

まず、準備としてコンテンツページの上部に、次の @MasterType ディレクティブを記述します。

[code lang=’html’] < %@ MasterType VirtualPath="~/[マスターページ].master" %>
[/code]

このディレクティブが存在すると、.NET Framework は、Master プロパティを厳密に型定義します。

実際に使うメソッドは、Public メンバである必要があります。

呼び出す方法は、Master プロパティ経由でメンバを指定します。
例えば、MasterPage オブジェクトが Public な Method1 を持つ場合、次の呼び出しの記述が可能です。

[code lang=’c#’] Master.Method1();
[/code]

私は、複雑なビジネスロジックを記述するのであればクラス分けしていますが、ちょっとした共通メソッド程度であれば、マスターページに記述する、というような使い分けをしています。

いつもシェアしていただいてありがとうございます。これからも「ちょいとお役立ちして嬉しくなる」記事の配信を目指しています。ポチッと↓のボタンからシェアしてください。

山本をフォローするだけでちょっぴりお得な情報が見つかりますよ↓↓↓