Asp.Net?
親マスターページの定義
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Parent.master.cs" Inherits="Test.Parent" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <asp:ContentPlaceHolder ID="head" runat="server"> </asp:ContentPlaceHolder> </head> <body> <form id="form1" runat="server"> <div> <img alt="" class="style1" src="Images/logo.gif" /></div> <asp:ContentPlaceHolder ID="ContentPlaceHolderHeader" runat="server"> </asp:ContentPlaceHolder> </form> </body> </html>
子マスターページの定義
<%@ Master Language="C#" MasterPageFile="~/Parent.Master" AutoEventWireup="true" CodeBehind="Child.master.cs" Inherits="Test.Child" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolderHeader" runat="server"> <table style="width: 100%;"> <tr> <td class="style78" valign="top"> <asp:Panel ID="Panel1" runat="server"> <asp:Label ID="Label1" Text="ABC" runat="server" /> </asp:Panel> </td> <td> <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"> </asp:ContentPlaceHolder> </td> </tr> </table> </asp:Content>
一般のフォームページの作成
<%@ Page Title="" Language="C#" MasterPageFile="~/Child.Master" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Test.WebForm1" %> <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> <p>XXXX</p> </asp:Content>
マスターページの使用がないページに対して、「this」は自分自身に指し、FindControlでもちろんページのコントロールを取得できるはずですが、マスターページをマークすると、「this.Control」でウォッチしてみると、ページ内のコントロールの順番階層がすべて変わって、マスターページから順番に並んで行く形となる。なので、マスターページ内のコントロールを検索するために、最初にマスターページ内の「ContentPlaceHolder」コントロールを取得してから、階層的に中のコントロールを取得して行きます。同様に入れ子マスターページ使用する場合、最初に一番上のマスターページ内の「ContentPlaceHolder」コントロールを取得し、次は二番目のマスターページの「ContentPlaceHolder」コントロールを取得して、こういう順番で取得したいコントロールを取得できる。
下記のソースコードは、入れ子マスターページが二つがある場合、子マスターページ内のコントロールを取得する例:
//親マスターページのインスタンスから、子マスターページ内の「ContentPlaceHolder」コントロールを取得 ContentPlaceHolder mpContentPlaceHolder = Page.Master.Master.FindControl("ContentPlaceHolderHeader") as ContentPlaceHolder; if (mpContentPlaceHolder != null) { //取得した子マスターページの「ContentPlaceHolder」コントロールから、 //子マスターページ内に配置した「Panel1」コントロールを取得する Panel mpTextBox = mpContentPlaceHolder.FindControl("Panel1") as Panel; if (mpTextBox != null) { mpTextBox.Visible = false; } }
yVoC[UNLIMITȂ1~] ECirŃ|C Yahoo yV
LINEf[^[Ōz500~`I