10 行でズバリ !! Web ページの共通化 (マスタ ページ) (VB)
マイクロソフト株式会社 デベロッパー & プラットフォーム統括本部
エバンジェリスト 近藤 和彦
最終更新日 2006 年 1 月 18 日
|
|
|
|
| | このコンテンツのポイント
- 複数の Web ページで共通的なデザインや機能をテンプレート化する方法を理解する。
今回紹介するコード
|
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim textBox1OfMasterPage As TextBox
textBox1OfMasterPage = Master.FindControl ("TextBox1")
Label1.Text = "Page 2 : " + textBox1OfMasterPage.Text
End Sub
今回のシステム要件
- Visual Studio 2005 すべてのエディション、または Visual Web Developer 2005
画面キャプチャは、Visual Studio 2005 Team Suite を利用した場合の例となります。
|
|
|
|
|
目次
はじめに
作成するサンプル アプリケーションの説明
マスタ ページの作成
コンテンツ ページの作成
動作確認
マスタ ページのデータを取得する
おわりに
補足事項
はじめに
多くの Web サイトでは、ヘッダ、フッタ、メニューなど、複数の Web ページで共通的なデザインや機能を持っています。
ASP.NET 2.0 のマスタ ページは、このような共通部分をテンプレート化することができ、これによって各 Web ページで重複した実装を行う必要がなくなるとともに、修正箇所が 1 箇所に集約されるため保守性も向上します。
ここでは、このマスタ ページを活用した Web ページの共通化の方法について解説します。
作成するサンプル アプリケーションの説明
ここでは、共通的なデザインを持つ 1 つのマスタ ページを作成し、2 つの Web ページでこれを共有します。
.gif)
Web ページ 1 (Page1.aspx)
.gif)
Web ページ 2 (Page2.aspx)
図 1. マスタ ページを活用した Web ページの例
まず初めに、事前準備として、新しい Web サイトを作成します。
Web サイトの新規作成方法については、「10 行でズバリ !! ASP.NET Web フォームによる Web アプリケーション開発 (VB)」 を参考にして下さい。
マスタ ページの作成
共通デザインや機能を提供するマスタ ページを作成します。
マスタ ページを作成するには、Visual Studio のメニューより、 [ファイル] - [新規作成] - [ファイル] を選択し、表示される [新しい項目の追加] ダイアログから、 [マスタ ページ] を選択します。
.gif)
図 2. マスタ ページの作成
名前: MasterPage.master
言語: Visual Basic
拡張子 ".master" のマスタ ページが追加されます。
マスタ ページの作成方法は特に難しいことはなく、以降は、基本的に通常の Web ページを作成するのと同じ要領です。ドラッグ アンド ドロップで UI コントロールを配置し、UI コントロールをダブルクリックすることで処理ロジックを記述することができます。
各 Web ページ独自のコンテンツについては、ContentPlaceHolder コントロールを貼り付け、その表示領域を定義します。マスタ ページを作成した場合、デフォルトでひとつの ContentPlaceHolder コントロールが貼り付けられています。
今回は、デザイナ画面より ContentPlaceHolder コントロールの上部に、以下の実装を行います。
- 「ASP.NET 2.0 マスタ ページ」 という文字を記述
- その下に TextBox コントロール (ID=TextBox1) を貼り付け
.gif)
図 3. マスタ ページのデザイン
コンテンツ ページの作成
各 Web ページ (コンテンツ ページ) を作成する場合、通常の Web ページと同様、 [Web フォーム] を選択します。
Visual Studio のメニューより [ファイル] - [新規作成] - [ファイル] を選択し、 [新しい項目の追加] ダイアログから [Web フォーム] を選択しますが、その際、ダイアログ下部の [マスタ ページを選択する] チェックボックスをチェックします。
.gif)
図 4. コンテンツ ページの作成
名前: Page1.aspx
言語: Visual Basic
マスターページを選択する: チェックする
[追加] ボタンをクリックすると、 [マスタ ページを選択して下さい] ダイアログが表示されます。
ここから、先ほど作成したマスタ ページを選択します。
.gif)
図 5. マスタ ページの選択
[OK] ボタンをクリックすると、Web ページが追加されます。
マスタ ページのデザインがグレーアウトされた状態で表示され、最終的な Web ページのデザインを確認しながら、それぞれのコンテンツ ページの開発ができます。
.gif)
図 6. コンテンツ ページのデザイン
後は、ContentPlaceHolder コントロールで定義した領域に対して、通常の Web ページと同様、ドラッグ アンド ドロップで UI コントロールを配置し、UI コントロールをダブルクリックすることで処理ロジックを記述することができます。
ここでは、単純に 「ASP.NET 2.0 コンテンツ ページ」 という文字のみを記述します。
.gif)
図 7. コンテンツ ページのデザイン (Page 1)
動作確認
それでは実行してみましょう。
Visual Studio のメニューより、 [デバッグ] - [デバッグなしで開始] を選択すると、ブラウザが起動され、コンテンツ ページ (Page1.aspx) が表示されます。
この際、マスタ ページのデザインと、実際のコンテンツ ページのデザインがマージされ、最終的にブラウザ上に表示されます。
.gif)
図 8. 実行結果 (Page1.aspx)
以上が、マスタ ページを利用した基本的な Web ページの作成方法となります。
マスタ ページのデータを取得する
もう少しマスタ ページの機能についてみてみましょう。マスタ ページは、単純に Web ページの共通デザインだけでなく、共通機能も実装することができます。
ここでは、マスタ ページ上におかれたテキスト ボックスの値を、コンテンツ ページから取得する方法について解説します。
新しいコンテンツ ページ (Page2.aspx) を作成します。
独自コンテンツの表示領域 (ContentPlaceHolder コントロール) に以下の UI コントロールを貼り付けます。
- Label コントロール (ID はデフォルトのLabel1 を使用)
- Button コントロール (ID はデフォルトのButton1 を使用)
.gif)
図 9. コンテンツ ページ (Page2.aspx) のデザイン
ボタン (Button1) がクリックされた時の処理として、下記のコードを記述します。
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim textBox1OfMasterPage As TextBox
textBox1OfMasterPage = Master.FindControl ("TextBox1")
Label1.Text = "Page 2 : " + textBox1OfMasterPage.Text
End Sub
Master オブジェクトによって、コンテンツ ページからマスタ ページのデータを操作することができます。
ここでは FindControl メソッドによって、ID が "TextBox1" というマスタ ページ上の TextBox コントロールを検索してそのオブジェクトを取得し、ローカル変数として作成した TextBox コントロールに格納しています。
後はこの TextBox コントロールに設定されている文字列を加工して、Web ページの Label1 に設定しています。
それでは、実行してみましょう。
ブラウザのアドレスにPage2.aspx のパスを入力して、Page2.aspx を表示します。
マスタ ページのテキスト ボックスに任意の文字列を入力し、Web ページのボタンをクリックします。すると、下記のようにマスタ ページの文字列が加工されてラベル上に表示されることが確認できます。
.gif)
図 10. 実行結果 (Page2.aspx)
おわりに
マスタ ページを活用し、複数のWeb ページでデザインや機能を共通化する方法について解説しました。
マスタ ページを使わずにそれぞれのページごとに共通部分を実装した場合、変更が発生すると、すべてのページを修正しなければなりません。これは、手間がかかる上に、修正漏れが発生するといった危険性もあります。
マスタ ページによって、よりシンプル、かつ直感的に共通化を行うことができ、これによって、
- 冗長な機能やデザインを作成したり、修正するための手間がなくなる
- 共通機能と個別機能を分けて並行開発できる
- 既に実績ある共通部品を再利用することによって品質の向上を期待することができる
などのメリットが考えられます。
補足事項
マスタ ページの基本的な作成方法について解説してきました。 このように、基本的には Visual Studio が必要な定義や作業を自動的に行うため、マスタ ページの仕組みについて特に意識しなくても開発は可能です。しかし、より緻密な制御を行う場合には、やはりマスタ ページの仕組みについて理解する必要があるため、ここで補足事項として触れます。 まず、マスタ ページについてみてみましょう。 Visual Studio を [ソース] ビューに切り替え、マスタ ページの HTML ソースを確認します。 通常の Web フォームと同じような HTML ソースが定義されていますが、ポイントが 2 点あります。 - まず、先頭行に Master ディレクティブ (<%@Master ...%>) があることを確認することができます。
| <<%@Master Language="VB" CodeFile="MasterPage.master.vb" Inherits="MasterPage" %> |
Master ディレクティブはこのページがマスタ ページであることを示し、マスタ ページに関する設定を行うことができます。
- さらに、本文中に ContentPlaceHolder コントロール (<asp:ContentPlaceHolder>) があることを確認することができます。
| <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"%> |
ContentPlaceHolder コントロールは、いわばコンテンツを表示するための予約域です。実際にはこの ContentPlaceHolder コントロールは 1 つのマスタ ページの中に複数定義することができます。
次に、コンテンツ ページについてみてみましょう。 Visual Studio を [ソース] ビューに切り替え、コンテンツ ページの HTML ソースを確認します。 コンテンツ ページについてはポイントが 3 点あります。 - 通常の Web ページとは異なり、<html>、<head>、<body> タグは定義しません。実際のWeb ページ表示時には、マスタ ページの定義が適用されます。
- Page ディレクティブ (<%@Page ... %>) のMasterPageFile にマスタ ページ ファイル (.master) の場所を指定します。
| <%@Page MasterPageFile="~/MasterPage.master" .... %> |
- Content コントロール (<asp:Content>) があることを確認することができます。
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> <asp:Label1 ID="Label1" runat="server" /> <br/> <asp:Button1 ID="Button1" runat="server" Text="Button1" /> </asp:Content> |
Content コントロールの中に、各 Web ページ固有のコンテンツを定義します。 マスタ ページ上の予約域 (ContentPlaceHolder コントロール) との対応づけのために、Content コントロールの ContentPlaceHolderID に、マスタ ページの該当する ContentPlaceHolder コントロールの ID を指定します。 特に ContentPlaceHolder コントロールを複数定義した場合には、この ID の対応づけが重要な意味を持ちます。
|
ページのトップへ