まずはマスターページ「Site1.Master」を追加。
【マスターページ「Site1.Master」】
1 | <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site1.master.cs" Inherits="WebApplication1.Sample.Site1" %> |
7 | < asp:ContentPlaceHolder ID = "head" runat = "server" ></ asp:ContentPlaceHolder > |
10 | < form id = "form1" runat = "server" > |
12 | < asp:ContentPlaceHolder ID = "ContentPlaceHolder1" runat = "server" ></ asp:ContentPlaceHolder > |
次に入れ子にされたマスターページ「NestedMasterPage1.master」を追加し、マスターページに「Site1.Master」を指定。
作成された「NestedMasterPage1.master」にContentPlaceHolderを2つ追加。
これを書いて置かないと「NestedMasterPage1.master」をマスターページとするフォーム等にasp:Contentタグが生成されない。
(※特に調べもせずになんとなーくで入れ子をしていた時、とりあえずここでつまづいた。)
【入れ子にされたマスターページ「NestedMasterPage1.master」】
1 | <%@ Master Language="C#" MasterPageFile="~/Sample/Site1.Master" AutoEventWireup="true" |
2 | CodeBehind="NestedMasterPage1.master.cs" Inherits="WebApplication1.Sample.NestedMasterPage1" %> |
4 | < asp:Content ID = "Content1" ContentPlaceHolderID = "head" runat = "server" > |
7 | < asp:ContentPlaceHolder ID = "Nestedhead" runat = "server" ></ asp:ContentPlaceHolder > |
9 | < asp:Content ID = "Content2" ContentPlaceHolderID = "ContentPlaceHolder1" runat = "server" > |
12 | < asp:ContentPlaceHolder ID = "NestedContentPlaceHolder1" runat = "server" ></ asp:ContentPlaceHolder > |
次にマスターページを使用したWebフォーム「WebForm1.aspx」を追加し、マスターページに「NestedMasterPage1.master」を指定。
【マスターページを使用したWebフォーム「WebForm1.aspx」】
1 | < asp:Content ID = "Content1" ContentPlaceHolderID = "Nestedhead" runat = "server" > |
4 | < asp:Content ID = "Content2" ContentPlaceHolderID = "NestedContentPlaceHolder1" runat = "server" > |
「NestedMasterPage1.master」でContentPlaceHolderを追加しておいたので、そのContentPlaceHolderにひもづくasp:Contentタグが生成されている。
上記、3つのファイルを作成し、WebForm1.aspxをスタートページに設定して実行。
ソースを確認してみる。
【WebForm1.aspxをスタートページにして、実行した結果のソース】
13 | < form method = "post" action = "WebForm1.aspx" id = "form1" > |
14 | < div class = "aspNetHidden" > |
15 | < input type = "hidden" name = "__VIEWSTATE" id = "__VIEWSTATE" value = "/wEPDwUKMTY1NDU2MTA1MmRkP87F4qPZjR5YK6bxld9tyMWDkLHWVT2qCGwoOKNobac=" /> |
各ファイルに記述したソースはこのように表示される。
今回の仕事で作るシステムの画面は上部に全画面共通のヘッダーメニュー、左側にサブ機能毎に異なるサイドメニュー、右側に各画面表示というレイアウトだったので、マスターページを使ってみた。
前はフレームで切ったり、ユーザーコントロールを作ったりしてたけど、マスターページが便利そう。
「.master」から「.aspx」のコントロールを参照することもできるし、もちろん逆に「.aspx」から「.master」のコントロールを参照することもできるから、ガンガン使いこなせるようにいろいろ試してみよう。
ちなみに参照するときの方法として、FindControlで探す方法があるんだけど、FindControlっていろいろコントロール見つけてきちゃうからめちゃめちゃすごいと思う。
まぁそうゆうメソッドなんだけどさ。
結構お世話になってるからなぁ。
ただ、FindControlは遅くなるって聞いたことあるけどね。。。(本当かどうかは知らない)