ASP.NET制御ページのプログラミング制御

7011 ワード

制御ページでは、多くの共通のプログラミングタスクを実行できます.
  • は、制御ページに定義されたメンバーにアクセスします.これらのメンバーには、制御ページの共通属性およびメソッド、またはサブコントロールが含まれます.
  • は、制御ページとコンテンツページを動的にバインドする.

  • ≪アクセス制御|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>