プログラミング方式でASPを使用する.NETマスターページ
10844 ワード
マスター・ページを使用して、次のような多くの共通タスクをプログラミングで実行できます.は、マスター・ページで定義されたメンバー(共通のプロパティ/メソッドまたはコントロールを含む)にアクセスします. は、マスターページをコンテンツページに動的に添付する.
マスターページのメンバーへのアクセス
これは、リクエストによって提供されたクエリー文字列に基づいてマスター・ページを選択できるコンテンツ・ページです.@MasterType命令を使用してマスターページのMaster属性に強いタイプを割り当てる場合、この命令はベースタイプを参照します.
<%@ Page Language="C#"Title="Content Page"%>
<%@ MasterType TypeName="BaseMaster"%>
protected
void Page_PreInit(Object sender, EventArgs e)
{
this.MasterPageFile = "MasterBlue.master";
if(Request.QueryString["color"] == "green")
{
this.MasterPageFile = "MasterGreen.master";
}
this.Title = Master.MyTitle;
}
Runat="Server">
Content from Content page.
転載先:
http://blog.coders.com.cn/pignut_wang/
マスターページのメンバーへのアクセス
Pageクラスは、マスター・ページ・メンバーへのアクセスを提供するために、Master属性を開示する.コンテンツ・ページから特定のマスター・ページのメンバーにアクセスするには、@ MasterTypeを作成して、このマスター・ページの強いタイプの参照を作成します.このコマンドを使用して、特定のマスターページを指すことができます.コンテンツページが独自のMasterプロパティを作成すると、プロパティのタイプが参照のマスターページに設定されます.
例えば、MasterPageという名前があるかもしれません.クラス名のマスターページmaster.次のような@ Pageおよび@MasterType命令を作成できます.
<%@ Page masterPageFile="~/MasterPage.master"%>
<%@ MasterType virtualPath="~/MasterPage.master"%>
@MasterTypeコマンドを使用する場合(この例のコマンド)、次の例に示すように、マスターページのメンバーを参照できます.
CompanyName.Text = Master.CompanyName;
このページのMasterプロパティのタイプはMaster Pageに設定されています.master.
マスターページのコントロールの値を取得
実行時に、マスター・ページがコンテンツ・ページに結合されるため、コンテンツ・ページのコードはマスター・ページのコントロールにアクセスできます.(マスターページのContentPlaceHolderコントロールにいくつかのコントロールが含まれている場合、これらのコントロールはコンテンツページのContentコントロールに書き換えられてアクセスできません.)これらのコントロールは保護されているため、マスターページのメンバーとして直接アクセスすることはできません.ただし、FindControlメソッドを使用して、マスターページの特定のコントロールを特定できます.アクセスするコントロールがマスターページのContentPlaceHolderコントロールの内部にある場合は、まずContentPlaceHolderコントロールへの参照を取得し、FindControlメソッドを呼び出してコントロールへの参照を取得する必要があります.
次の例では、マスター・ページのコントロールへの参照を取得する方法を示します.参照されるコントロールの1つはContentPlaceHolderコントロールにあり、もう1つはそうではありません.
// Gets a reference to a TextBox control inside a ContentPlaceHolder
ContentPlaceHolder mpContentPlaceHolder;
TextBox mpTextBox;
mpContentPlaceHolder = (ContentPlaceHolder)Master.FindControl(
"ContentPlaceHolder1");
if(mpContentPlaceHolder != null)
{
mpTextBox = (TextBox) mpContentPlaceHolder.FindControl("TextBox1");
if(mpTextBox != null) { mpTextBox.Text = "TextBox found!"; }
}
// Gets a reference to a Label control that is not in a
// ContentPlaceHolder control
Label mpLabel = (Label) Master.FindControl("masterPageLabel");
if(mpLabel != null)
{
Label1.Text = "Master page label = " + mpLabel.Text;
}
以上のように、FindControlメソッドを使用して、マスターページContentPlaceHolderコントロールの内容にアクセスできます.ContentPlaceHolderコントロールがContentコントロールのコンテンツとマージされている場合、ContentPlaceHolderコントロールには独自のデフォルトは含まれません.逆に、コンテンツ・ページで定義されたテキストとコントロールが含まれます.
マスターページを動的に添付
マスターページ(@Pageコマンドまたはプロファイル)を宣言で指定するほか、マスターページをコンテンツページに動的に添付することもできます.マスター・ページとコンテンツ・ページは、ページ処理の初期化フェーズでマージされるため、以前にマスター・ページを割り当てる必要があります.通常、次の例に示すように、PreInit段階でマスターページが動的に割り当てられる.
void Page_PreInit(Object sender, EventArgs e)
{
this.MasterPageFile = "~/NewMaster.master";
}
ダイナミックマスターページの強いタイプ
コンテンツ・ページが@MasterTypeコマンドを使用してマスター・ページに強力なタイプを割り当てている場合は、動的に割り当てられたすべてのマスター・ページに適用する必要があります.マスター・ページを動的に選択する場合は、ベース・クラスを作成し、このベース・クラスからマスター・ページを割り当てることをお勧めします.このベース・マスター・ページ・クラスは、その後、マスター・ページに共通するプロパティとメソッドを定義できます.コンテンツ・ページでは、@MasterTypeコマンドを使用して強いタイプをマスター・ページに割り当てる場合、単一のマスター・ページではなくベース・クラスにタイプを割り当てることができます.
次の例では、複数のマスター・ページで使用できるベース・マスター・ページ・タイプを作成する方法を示します.この例は、MasterPageコントロールから派生したベース・タイプ、ベース・タイプから継承された2つのマスター・ページ、およびユーザーがクエリー文字列(?color=green)を使用してマスター・ページを動的に選択できるようにするコンテンツ・ページを含む.このベースマスタータイプは、MyTitleという名前のプロパティを定義します.いずれかのマスターページはこのMyTitleプロパティを書き換え、別のマスターページは書き換えません.コンテンツページは、MyTitleプロパティをページタイトルとして表示します.したがって、選択したマスターページによってページタイトルが異なります.
これはベースマスターページのタイプです.
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public
class BaseMaster : System.Web.UI.MasterPage
{
public virtual String MyTitle
{
get {
return "BaseMaster Title"; }
}
}
これは最初のマスターページで、青い背景が表示されます.なお,@Master命令のInherits属性はベースタイプを参照する.
<%@ Master Language="C#" Inherits="BaseMaster" ClassName="MasterBlue" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/
xhtml11/DTD/xhtml11.dtd">
<script runat="server">
// No property here that overrrides the MyTitle property of the base
master.
</script>
<html >
<head id="Head1" runat="server">
<title>No title</title>
</head>
<body>
<form id="form1" runat="server">
<div style="background-color:LightBlue">
<asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
Content from MasterBlue.
</asp:contentplaceholder>
</div>
</form>
</body>
</html>
これは2番目のマスターページです.緑色のバックグラウンドを表示し、ベース・タイプで定義されたMyTitleプロパティを書き換えた場合を除き、最初のマスター・ページと同じです.
<%@ Master Language="C#"Inherits="BaseMaster"
ClassName="MasterGreen"%>
//W3C//DTD XHTML 1.1//EN"
"http:
//www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
public override String MyTitle
{
get {
return "MasterGreen Title"; }
}
No title
// Gets a reference to a TextBox control inside a ContentPlaceHolder
ContentPlaceHolder mpContentPlaceHolder;
TextBox mpTextBox;
mpContentPlaceHolder = (ContentPlaceHolder)Master.FindControl(
"ContentPlaceHolder1");
if(mpContentPlaceHolder != null)
{
mpTextBox = (TextBox) mpContentPlaceHolder.FindControl("TextBox1");
if(mpTextBox != null) { mpTextBox.Text = "TextBox found!"; }
}
// Gets a reference to a Label control that is not in a
// ContentPlaceHolder control
Label mpLabel = (Label) Master.FindControl("masterPageLabel");
if(mpLabel != null)
{
Label1.Text = "Master page label = " + mpLabel.Text;
}
マスターページ(@Pageコマンドまたはプロファイル)を宣言で指定するほか、マスターページをコンテンツページに動的に添付することもできます.マスター・ページとコンテンツ・ページは、ページ処理の初期化フェーズでマージされるため、以前にマスター・ページを割り当てる必要があります.通常、次の例に示すように、PreInit段階でマスターページが動的に割り当てられる.
void Page_PreInit(Object sender, EventArgs e)
{
this.MasterPageFile = "~/NewMaster.master";
}
ダイナミックマスターページの強いタイプ
コンテンツ・ページが@MasterTypeコマンドを使用してマスター・ページに強力なタイプを割り当てている場合は、動的に割り当てられたすべてのマスター・ページに適用する必要があります.マスター・ページを動的に選択する場合は、ベース・クラスを作成し、このベース・クラスからマスター・ページを割り当てることをお勧めします.このベース・マスター・ページ・クラスは、その後、マスター・ページに共通するプロパティとメソッドを定義できます.コンテンツ・ページでは、@MasterTypeコマンドを使用して強いタイプをマスター・ページに割り当てる場合、単一のマスター・ページではなくベース・クラスにタイプを割り当てることができます.
次の例では、複数のマスター・ページで使用できるベース・マスター・ページ・タイプを作成する方法を示します.この例は、MasterPageコントロールから派生したベース・タイプ、ベース・タイプから継承された2つのマスター・ページ、およびユーザーがクエリー文字列(?color=green)を使用してマスター・ページを動的に選択できるようにするコンテンツ・ページを含む.このベースマスタータイプは、MyTitleという名前のプロパティを定義します.いずれかのマスターページはこのMyTitleプロパティを書き換え、別のマスターページは書き換えません.コンテンツページは、MyTitleプロパティをページタイトルとして表示します.したがって、選択したマスターページによってページタイトルが異なります.
これはベースマスターページのタイプです.
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public
class BaseMaster : System.Web.UI.MasterPage
{
public virtual String MyTitle
{
get {
return "BaseMaster Title"; }
}
}
これは最初のマスターページで、青い背景が表示されます.なお,@Master命令のInherits属性はベースタイプを参照する.
<%@ Master Language="C#" Inherits="BaseMaster" ClassName="MasterBlue" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/
xhtml11/DTD/xhtml11.dtd">
<script runat="server">
// No property here that overrrides the MyTitle property of the base
master.
</script>
<html >
<head id="Head1" runat="server">
<title>No title</title>
</head>
<body>
<form id="form1" runat="server">
<div style="background-color:LightBlue">
<asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
Content from MasterBlue.
</asp:contentplaceholder>
</div>
</form>
</body>
</html>
これは2番目のマスターページです.緑色のバックグラウンドを表示し、ベース・タイプで定義されたMyTitleプロパティを書き換えた場合を除き、最初のマスター・ページと同じです.
<%@ Master Language="C#"Inherits="BaseMaster"
ClassName="MasterGreen"%>
//W3C//DTD XHTML 1.1//EN"
"http:
//www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
public override String MyTitle
{
get {
return "MasterGreen Title"; }
}
これは、リクエストによって提供されたクエリー文字列に基づいてマスター・ページを選択できるコンテンツ・ページです.@MasterType命令を使用してマスターページのMaster属性に強いタイプを割り当てる場合、この命令はベースタイプを参照します.
<%@ Page Language="C#"Title="Content Page"%>
<%@ MasterType TypeName="BaseMaster"%>
protected
void Page_PreInit(Object sender, EventArgs e)
{
this.MasterPageFile = "MasterBlue.master";
if(Request.QueryString["color"] == "green")
{
this.MasterPageFile = "MasterGreen.master";
}
this.Title = Master.MyTitle;
}
Content from Content page.
転載先:
http://blog.coders.com.cn/pignut_wang/