ASP.NET制御ページのプログラミング制御
7011 ワード
制御ページでは、多くの共通のプログラミングタスクを実行できます.は、制御ページに定義されたメンバーにアクセスします.これらのメンバーには、制御ページの共通属性およびメソッド、またはサブコントロールが含まれます. は、制御ページとコンテンツページを動的にバインドする.
制御ページのメンバーにアクセスするために、
例えば、MasterPageという名前があります.クラス名
それ以前に、ページの
コントロール・ページのコントロール・プロパティ値の取得
実行時に制御ページがコンテンツページとマージされるため、制御ページのコントロールはコンテンツページのコードによってアクセスできます.(コントロールページの
次の例では、コントロール・ページからコントロールの参照を取得する方法を示します.この例の
上記の例に示すように、
制御ページの参照を宣言する(
制御ページのダイナミック強タイプ変換
コンテンツ・ページが
次の例では、複数の制御ページに使用する制御ページベースタイプを作成する方法を示します.この例は、
次の例は、制御ページベースタイプです.
次の例は、青色の背景を示す最初の制御ページです.
次の例は、2番目の制御ページです.最初の制御ページとほぼ同様に、表示される背景色が緑色であり、ベースタイプに定義された
次の例は、ユーザーがURLクエリー列を使用して制御ページを動的に選択できるようにするコンテンツページです.
≪アクセス制御|Access Control|ldap≫ページのメンバー
制御ページのメンバーにアクセスするために、
Page
クラスはMaster
属性を暴露した.コンテンツ・ページで指定した制御ページのメンバーにアクセスするには、@ MasterType
コマンドを使用して強いタイプのオブジェクトを作成し、制御ページを参照します.このコマンドを使用すると、指定した制御ページを位置決めできます.ページがMaster
属性を作成すると、その属性のタイプは参照される制御ページに変換される.例えば、MasterPageという名前があります.クラス名
MasterPage_master
のmasterの制御ページ.では、次の例の@ Page
および@ MasterType
命令を作成できます.
<%@ Page masterPageFile="~/MasterPage.master"%>
<%@ MasterType virtualPath="~/MasterPage.master"%>
@ MasterType
コマンドを使用すると、上記の例のように、次の例を使用して制御ページのメンバーを参照できます.
CompanyName.Text = Master.CompanyName;
それ以前に、ページの
Master
属性のタイプは、MasterPage_master
に変換されていた.コントロール・ページのコントロール・プロパティ値の取得
実行時に制御ページがコンテンツページとマージされるため、制御ページのコントロールはコンテンツページのコードによってアクセスできます.(コントロールページの
ContentPlaceHolder
コントロールのサブコントロールがコンテンツページのContent
コントロールに再ロードされた場合、これらのサブコントロールにアクセスできません.)これらのコントロールは保護されたレベルのメンバーであるため、これらのコントロールは直接制御ページのメンバーとしてアクセスできません.ただし、FindControl
メソッドを使用して、制御ページ内の特定のコントロールを位置決めできます.コントロールページのContentPlaceHolder
コントロールの内部にアクセスするコントロールが必要な場合は、まずContentPlaceHolder
コントロールの参照を取得し、FindControl
メソッドを呼び出してコントロールの参照を取得する必要があります.次の例では、コントロール・ページからコントロールの参照を取得する方法を示します.この例の
ContentPlaceHolder
コントロールのうち、唯一のサブコントロールのみが参照される.
// ContentPlaceHolder TextBox
ContentPlaceHolder mpContentPlaceHolder;
TextBox mpTextBox;
mpContentPlaceHolder =
(ContentPlaceHolder)Master.FindControl("ContentPlaceHolder1");
if(mpContentPlaceHolder != null)
{
mpTextBox = (TextBox) mpContentPlaceHolder.FindControl("TextBox1");
if(mpTextBox != null)
{
mpTextBox.Text = "TextBox !";
}
}
// ContentPlaceHolder Label
Label mpLabel = (Label) Master.FindControl("masterPageLabel");
if(mpLabel != null)
{
Label1.Text = " = " + mpLabel.Text;
}
上記の例に示すように、
FindControl
メソッドを使用して、制御ページのContentPlaceHolder
コントロールのコンテンツにアクセスできます.ContentPlaceHolder
コントロールがContent
コントロールのコンテンツと統合されている場合、ContentPlaceHolder
コントロールにはデフォルトのコンテンツは含まれません.また、コンテンツ・ページに定義されたテキスト・コンテンツとコントロールが含まれます.ダイナミックバインド制御ページ
制御ページの参照を宣言する(
@ Page
命令またはプロファイル)ほか、制御ページとコンテンツページを動的にマージすることもできます.制御ページとコンテンツページのマージプロセスは、ページプロセスの初期化イベントで発生するため、制御ページの参照は、このイベントが発生する前に指定する必要があります.通常、次の例に示すように、PreInit
イベントで参照される制御ページを動的に指定できます.
void Page_PreInit(Object sender, EventArgs e)
{
this.MasterPageFile = "~/NewMaster.master";
}
制御ページのダイナミック強タイプ変換
コンテンツ・ページが
MasterType
命令を使用して制御ページに強いタイプを指定した場合、このタイプは動的に指定された制御ページに適用される必要があります.制御ページを動的に選択する場合は、制御ページの起源にベースクラスを作成することをお勧めします.次に、制御ページベースクラスで共通のプロパティとメソッドを定義します.コンテンツページで、MasterType
コマンドを使用して制御ページに強いタイプを指定する必要がある場合は、個別の制御ページではなくベースクラスで指定してください.次の例では、複数の制御ページに使用する制御ページベースタイプを作成する方法を示します.この例は、
MasterPage
コントロールから継承されたベースタイプと、ベースタイプから継承された2つの制御ページと、ユーザがURLクエリ列(?color=green)を使用して制御ページを動的に選択できるようにするコンテンツページとから構成される.制御ページベースクラスは、MyTitle
という属性を定義します.また.1つの制御ページは、MyTitle
プロパティを再ロードしましたが、もう1つはありません.コンテンツページは、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 "; }
}
}
次の例は、青色の背景を示す最初の制御ページです.
@ 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">
// MyTitle 。
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title> </title>
</head>
<body>
<form id="form1" runat="server">
<div style="background-color:LightBlue">
<asp:contentplaceholder id="ContentPlaceHolder1"
runat="server">
MasterBlue 。
</asp:contentplaceholder>
</div>
</form>
</body>
</html>
次の例は、2番目の制御ページです.最初の制御ページとほぼ同様に、表示される背景色が緑色であり、ベースタイプに定義された
MyTitle
属性が再ロードされる.
<%@ Master Language="C#" Inherits="BaseMaster"
ClassName="MasterGreen" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<script runat="server">
public override String MyTitle
{
get { return "MasterGreen "; }
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title> </title>
</head>
<body>
<form id="form1" runat="server">
<div style="background-color:LightGreen">
<asp:contentplaceholder id="ContentPlaceHolder1"
runat="server">
MasterGreen 。
</asp:contentplaceholder>
</div>
</form>
</body>
</html>
次の例は、ユーザーがURLクエリー列を使用して制御ページを動的に選択できるようにするコンテンツページです.
@ MasterType
命令は、ページのMaster
属性に参照ベースタイプの強いタイプを指定する.
<%@ Page Language="C#" Title=" " %>
<%@ MasterType TypeName="BaseMaster" %>
<script runat="server">
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;
}
</script>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1"
Runat="Server">
。
</asp:Content>