ユーザー コントロール プロパティの操作
ユーザー コントロールを作成してそのコントロールに関するプロパティを指定した後で、そのユーザー コントロールを含むページからそれらのプロパティの値を宣言またはプログラムによって変更できます。また、これらの方法は、入れ子と呼ばれる 1 つのユーザー コントロールを別のユーザー コントロールに追加する場合にも使用できます。
セキュリティに関するメモ ユーザー コントロールのプロパティとして、ユーザー名やパスワードなどの重要な情報が格納されてしまわないよう注意してください。
ユーザー コントロール プロパティの値を宣言によって操作するには
ユーザー コントロール タグの中で、プロパティの名前と値を属性および値のペアとして宣言します。次の例では、
Color
とText
はAcme:Login
カスタム サーバー コントロール タグによって作成されたユーザー コントロール インスタンスのプロパティであり、Color
はblue
に設定され、Text
はThis is a sample
に設定されます。<Acme:Login Color="blue" Text="This is a sample." Runat="server" />
ユーザー コントロール プロパティの値をプログラムによって操作するには
プロパティを持つユーザー コントロールおよび ASP.NET サーバー コントロールまたは HTML 要素を作成して、そのプロパティ値を表示します。
<span>
要素を使用してColor
プロパティの値とText
プロパティの値を表示する例を次に示します。<script runat="server"> Public Color As String = "blue" Public Text As String = "This is a simple message user control!" </script> <span id="Message" style="color:<%=Color%>"><%=Text%></span> [C#] <script language="C#" runat="server"> public String Color = "blue"; public String Text = "This is a simple message user control!"; </script> <span id="Message" style="color:<%=Color%>"><%=Text%></span>
ユーザー コントロールを含むページまたは @ Register ディレクティブを持つユーザー コントロールを登録し、そのユーザー コントロールの tagname および tagprefix とそのユーザー コントロール ファイルへのパスを定義します。ユーザー コントロールをプログラムによってページまたは別のユーザー コントロールに組み込む方法については、「ユーザー コントロール インスタンスのプログラムによる作成」を参照してください。
このページのコード宣言ブロックで、ユーザー コントロールのプロパティを操作するコードを作成します。
ユーザー コントロールを含むページまたはユーザー コントロールの本体には、そのユーザー コントロールのプロパティの操作に参加するそれ以外の ASP.NET サーバー コントロールを組み込みます。たとえば、DropDownList Web サーバー コントロールまたは HtmlSelect サーバー コントロールを組み込んで、
Color
プロパティを操作して色を選択できます。手順 1. で説明したユーザー コントロールを操作するページを次の例に示します。
<%@ Register TagPrefix="Acme" TagName="Message" Src="simpleusercontrol.ascx" %> <html> <script language="VB" runat="server"> Sub SubmitBtn_Click(sender As Object, E As EventArgs) MyMessage.Text = "Message text changed!" MyMessage.Color = "red" End Sub 'SubmitBtn_Click </script> <body style="font: 10pt verdana"> <h3>A Simple User Control w/ Properties</h3> <form runat="server"> <Acme:Message id="MyMessage" Text="This is a custom message!" Color="blue" runat="server"/> <p> <asp:button text="Change Properties" OnClick="SubmitBtn_Click" runat=server/> </form> </body> </html> [C#] <%@ Register TagPrefix="Acme" TagName="Message" Src="simpleusercontrol.ascx" %> <html> <script language="C#" runat="server"> void SubmitBtn_Click(Object sender, EventArgs E) { MyMessage.Text = "Message text changed!"; MyMessage.Color = "red"; } </script> <body style="font: 10pt verdana"> <h3>A Simple User Control w/ Properties</h3> <form runat="server"> <Acme:Message id="MyMessage" Text="This is a custom message!" Color="blue" runat="server"/> <p> <asp:button text="Change Properties" OnClick="SubmitBtn_Click" runat=server/> </form> </body> </html>
宣言ページまたはユーザー コントロールからと分離コード ページまたはユーザー コントロール クラスからのユーザー コントロール プロパティの操作には多くの類似点がある一方で、大きな相違点があります。特に、すべての RAD (Rapid Application Deployment) デザイナが行うように、ユーザー コントロールを含むページまたはユーザー コントロールを分離コード クラスで作成する場合、使用する予定のあるユーザー コントロールを分離コード クラスで作成します。これによって、コード ファイルと使用するファイルとの間に鮮明な描画が提供されるため、要求の送信元クライアント (.aspx ファイルおよび .ascx ファイル) に HTML を表示できます。詳細については、「分離コード ファイル内でのユーザー コントロールの開発」を参照してください。
メモ 次の手順の例は、「ユーザー コントロール プロパティの値をプログラムによって操作するには」の例を変更したものです。このコードは、分離コード ファイルで使用できるように変更されています。
ユーザー コントロール プロパティの値を分離コード ファイルからプログラムによって操作するには
分離コード ファイルで、操作するプロパティを含んだユーザー コントロール コードを作成します。前の手順から単純なユーザー コントロールを適合させた例を次に示します。
Imports System Imports System.Web.UI Imports System.Web.UI.HtmlControls Namespace UserControlTest Public Class MyUserControl Inherits UserControl Public Color As String = "blue" Public [Text] As String = "This is a simple message user control!" End Class 'MyUserControl End Namespace 'UserControlTest [C#] using System; using System.Web.UI; using System.Web.UI.HtmlControls; namespace UserControlTest { public class MyUserControl : UserControl { public string Color = "blue"; public string Text = "This is a simple message user control!"; } }
個別の分離コード ファイルで、ユーザー コントロール プロパティの値を操作するユーザー コントロールを含むページまたはユーザー コントロールを作成します。この例の目的のために、このコードは適切な言語拡張子の付いた
MyPage
ファイルに格納されています。Imports System Imports System.Web.UI Imports System.Web.UI.WebControls Imports UserControlTest Namespace PageTest Public Class MyPage Inherits Page Public mybutton As Button Public MyMessage As MyUserControl Public Placeholder As PlaceHolder Sub Page_Load(sender As [Object], e As EventArgs) Dim MyMessage As Control = LoadControl("uc.ascx") Placeholder.Controls.Add(MyMessage) Dim mybutton As New Button() mybutton.Text = "Change property values" mybutton.OnClick = "SubmitBtn_Click" Placeholder.Controls.Add(mybutton) End Sub 'Page_Load Protected Sub SubmitBtn_Click(sender As [Object], e As EventArgs) MyMessage.Text = "Message text changed!" MyMessage.Color = "red" End Sub 'SubmitBtn_Click End Class 'MyPage End Namespace 'PageTest [C#] using System; using System.Web.UI; using System.Web.UI.WebControls; using UserControlTest; namespace PageTest { public class MyPage : Page { public Button mybutton; public MyUserControl MyMessage; public PlaceHolder Placeholder; void Page_Load(Object sender, EventArgs e) { Control MyMessage = LoadControl("uc.ascx"); Placeholder.Controls.Add(MyMessage); Button mybutton = new Button(); mybutton.Text = "Change property values"; mybutton.OnClick = "SubmitBtn_Click"; Placeholder.Controls.Add(mybutton); } protected void SubmitBtn_Click(Object sender, EventArgs e) { MyMessage.Text = "Message text changed!"; MyMessage.Color = "red"; } } }
ユーザー コントロール分離コード ファイルと、コンテナ ページやユーザー コントロールの分離コード ファイルをコンパイルしてアセンブリを生成します。コンテナ ページやユーザー コントロールが、使用するユーザー コントロール コードにアクセスしているかどうかを確認する必要があります。これらのファイルを同じ .dll ファイルでコンパイルすることも、ページやコンテナ ユーザー コントロールをコンパイルする場合にコマンド ラインで次のようなコンパイラ命令を使用することもできます。次の例では、
uc.dll
は、ユーザー コントロール ソース ファイルからコンパイルされた DLL を表します。メモ 次のコンパイラ コマンド ライン命令では、ソース ファイルが格納されているディレクトリからコンパイルすることを想定します。また、\bin ディレクトリに対してコンパイルすることを想定します。この場合、\bin ディレクトリは、ソース ファイルが格納されているディレクトリのサブディレクトリです。
vbc /r:.\bin\uc.dll /target:library /out:.\bin\p.dll MyPage.vb [C#] csc /r:.\bin\uc.dll /target:library /out:.\bin\p.dll MyPage.cs
関連する .aspx ファイルまたは .ascx ファイルにクラスが自動的にリンクできるように、作成したすべての DLL がアプリケーションの \bin ディレクトリに格納されているかどうかを確認してください (未確認の場合)。
適切な .aspx ファイルと .ascx ファイルを作成します。必ず PlaceHolder サーバー コントロールを .aspx ファイルに組み込んでください。このコントロールには、ページ分離コード DLL で宣言されたコントロールから動的に生成されたユーザー インターフェイス (UI) が含まれます。また、ページに必要な HTML 要素と作成したユーザー コントロール コードも組み込みます。
メモ この場合、@ Control ディレクティブまたは @ Page ディレクティブで Src 属性を使用しないでください。アセンブリから両方のクラスを継承するため、Inherits 属性を使用してください。また、名前空間でページおよびユーザー コントロールを作成する場合は、その名前空間の名前を Inherits 属性の値に含める必要があります。
前の例で示したユーザー コントロールの .ascx ファイルと、ページの .aspx ファイルを例として次に示します。
.ascx ファイル
<%@ Control Inherits="UserControlTest.MyUserControl" %> <span id="Message" style="color:<%=Color%>"><%=Text%></span>
.aspx ファイル
<%@ Import Namespace="PageTest" %> <%@ Page language="VB" Inherits="PageTest.MyPage" %> <%@ Reference control="uc.ascx" %> <html> <body style="font: 10pt verdana"> <h3>A Simple User Control w/ Properties</h3> <form runat="server"> <asp:placeholder id="Placeholder" runat="server" /> </form> </body> </html> [C#] <%@ Import Namespace="PageTest" %> <%@ Page language="C#" Inherits="PageTest.MyPage" %> <%@ Reference control="uc.ascx" %> <html> <body style="font: 10pt verdana"> <h3>A Simple User Control w/ Properties</h3> <form runat="server"> <asp:placeholder id="Placeholder" runat="server" /> </form> </body> </html>
参照
Web フォーム ユーザー コントロール | Web フォーム ページへのユーザー コントロールの取り込み | Windows フォーム ページのサーバー イベント処理 | ユーザー コントロール イベントの処理