【ASP.NET】マスターページ(Master Page)

マスターページ

作成方法

 * ソリューションエクスプローラのプロジェクトを右クリックし、[追加]-[新しい項目]-[マスタページ](拡張子:.Master)を追加できる

使用方法

 [1] ソリューションエクスプローラのプロジェクトを右クリックし、[追加]-[新しい項目]-[マスタページを使用したWebフォーム]を選択
 [2] マスタページを選択するダイアログで該当するマスターページを選ぶ

 →マスターページを取り込んだファイルが作成できる

補足

 * マスタページは、入れ子にすることも可能

マスターページあれこれ

マスターページのプロパティへのアクセス

準備

 [1] アクセス用にpublicのプロパティをマスターファイルに追加する

組み込む

 [1] コンテンツページ(*.aspx)に、以下の1行を追加する

<%@ MasterType VirtualPath="~/【マスターファイル名】.master" %>

 [2] 準備[1]で追加したプロパティを使って、マスターファイルを操作する

サンプル

Site1.Master

<%@ Master Language="VB" AutoEventWireup="false" CodeBehind="Site1.master.vb" Inherits="WebApplication3.Site1" %>
<!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>
        <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
        </asp:ContentPlaceHolder>           
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    </div>
    </form>
</body>
</html>

Site1.Master.vb

Public Class Site1
    Inherits System.Web.UI.MasterPage
    Public WriteOnly Property Label1Text() As String
        Set(ByVal value As String)
            Me.Label1.Text = value
        End Set
    End Property

    Public Property Label1TextVisible() As Boolean
        Get
            Return Me.Label1.Visible
        End Get
        Set(ByVal value As Boolean)
            Me.Label1.Visible = value
        End Set
    End Property
End Class

WebForm1.aspx

<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/Site1.Master" CodeBehind="WebForm1.aspx.vb" Inherits="WebApplication1.WebForm1" %>
<%@ MasterType VirtualPath="~/Site1.Master" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    <asp:Button ID="Button1" runat="server" Text="Button" />
    <asp:Button ID="Button2" runat="server" Text="Button" />
</asp:Content>

WebForm1.aspx.vb

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Master.Label1Text = Me.TextBox1.Text
End Sub

Protected Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Master.Label1TextVisible = Not Master.Label1TextVisible
End Sub

参考文献

http://www.atmarkit.co.jp/fdotnet/dotnettips/469aspmasterpage2/aspmasterpage2.html
http://msdn.microsoft.com/ja-JP/library/c8y19k6h.aspx
http://csharp.yaminabe.info/2006/08/aspnet.html