ParseChildrenAttribute クラス
アセンブリ: System.Web (system.web.dll 内)

<AttributeUsageAttribute(AttributeTargets.Class)> _ Public NotInheritable Class ParseChildrenAttribute Inherits Attribute
[AttributeUsageAttribute(AttributeTargets.Class)] public sealed class ParseChildrenAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Class)] public ref class ParseChildrenAttribute sealed : public Attribute

ParseChildrenAttribute クラスを使用して、カスタム サーバー コントロールを ParseChildrenAttribute メタデータ属性でマークすることにより、サーバー コントロールに対して解析ロジックを指定できます。
サーバー コントロールをメタデータ属性 ParseChildren(true) でマークすると、パーサーは、そのサーバー コントロールのタグ内の要素をプロパティとして解釈します。このシナリオでは、ChildrenAsProperties は true です。
サーバー コントロールをメタデータ属性 ParseChildren(true,"<Default Property>") でマークすると、DefaultProperty プロパティがその属性に渡されるプロパティ名に設定されます。
サーバー コントロールをメタデータ属性 ParseChildren(false) でマークすると (既定値)、パーサーは、サーバー コントロールのタグ内の要素を、関連付けられている ControlBuilder で解析する内容、つまりコントロールとして解釈します。このシナリオでは、ChildrenAsProperties は false です。
属性の使用方法については、「属性を使用したメタデータの拡張」を参照してください。

このセクションには、2 つのコード例が含まれています。最初のコード例では、ParseChildrenAttribute クラスのプロパティを設定する方法を示します。2 番目のコード例では、ASP.NET ページでクラスを使用する方法を示します。
次のコード例では、CollectionPropertyControl というカスタム サーバー コントロールの ParseChildrenAttribute オブジェクトを設定する方法を示します。ParseChildrenAttribute は ChildrenAsProperties プロパティを true に設定し、DefaultProperty プロパティを Employee クラスに設定しています。
Imports System Imports System.Collections Imports System.Web Imports System.Web.UI Imports System.Web.UI.WebControls Imports System.Security.Permissions Namespace Samples.AspNet.VB.Controls ' The child element class. <AspNetHostingPermission(SecurityAction.Demand, _ Level:=AspNetHostingPermissionLevel.Minimal)> _ Public NotInheritable Class Employee Private _name As String Private _title As String Private _alias As String Public Sub New() Me.New("", "", "") End Sub 'New Public Sub New(ByVal name As String, ByVal title As String, ByVal employeeAlias As String) Me._name = name Me._title = title Me._alias = employeeAlias End Sub 'New Public Property Name() As String Get Return _name End Get Set(ByVal value As String) _name = Value End Set End Property Public Property Title() As String Get Return _title End Get Set(ByVal value As String) _title = Value End Set End Property Public Property [Alias]() As String Get Return _alias End Get Set(ByVal value As String) _alias = Value End Set End Property End Class 'Employee ' Use the ParseChildren attribute to set the ChildrenAsProperties ' and DefaultProperty properties. Using this constructor, the ' control parses all child controls as properties and must define ' a public property named Employees, which it declares as ' an ArrayList. Nested (child) elements must correspond to ' child elements of the Employees property or to other ' properties of the control. <ParseChildren(True, "Employees")> _ <AspNetHostingPermission(SecurityAction.Demand, _ Level:=AspNetHostingPermissionLevel.Minimal)> _ Public NotInheritable Class CollectionPropertyControl Inherits Control Private _header As String Private _employees As New ArrayList() Public Property Header() As String Get Return _header End Get Set(ByVal value As String) _header = Value End Set End Property Public ReadOnly Property Employees() As ArrayList Get Return _employees End Get End Property ' Override the CreateChildControls method to ' add child controls to the Employees property when this ' custom control is requested from a page. Protected Overrides Sub CreateChildControls() Dim label As New Label() label.Text = Header label.BackColor = System.Drawing.Color.Beige label.ForeColor = System.Drawing.Color.Red Controls.Add(label) Controls.Add(New LiteralControl("<BR> <BR>")) Dim table As New Table() Dim htr As New TableRow() Dim hcell1 As New TableHeaderCell() hcell1.Text = "Name" htr.Cells.Add(hcell1) Dim hcell2 As New TableHeaderCell() hcell2.Text = "Title" htr.Cells.Add(hcell2) Dim hcell3 As New TableHeaderCell() hcell3.Text = "Alias" htr.Cells.Add(hcell3) table.Rows.Add(htr) table.BorderWidth = Unit.Pixel(2) table.BackColor = System.Drawing.Color.Beige table.ForeColor = System.Drawing.Color.Red Dim employee As Employee For Each employee In Employees Dim tr As New TableRow() Dim cell1 As New TableCell() cell1.Text = employee.Name tr.Cells.Add(cell1) Dim cell2 As New TableCell() cell2.Text = employee.Title tr.Cells.Add(cell2) Dim cell3 As New TableCell() cell3.Text = employee.Alias tr.Cells.Add(cell3) table.Rows.Add(tr) Next employee Controls.Add(table) End Sub 'CreateChildControls End Class End Namespace
using System; using System.Collections; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Security.Permissions; namespace Samples.AspNet.CS.Controls { // The child element class. [AspNetHostingPermission(SecurityAction.Demand, Level=AspNetHostingPermissionLevel.Minimal)] public sealed class Employee { private String name; private String title; private String alias; public Employee():this ("" ,"",""){} public Employee (String name, String title, String alias) { this.name = name; this.title = title; this.alias = alias; } public String Name { get { return name; } set { name = value; } } public String Title { get { return title; } set { title = value; } } public String Alias { get { return alias; } set { alias = value; } } } // Use the ParseChildren attribute to set the ChildrenAsProperties // and DefaultProperty properties. Using this constructor, the // control parses all child controls as properties and must define // a public property named Employees, which it declares as // an ArrayList. Nested (child) elements must correspond to // child elements of the Employees property or to other // properties of the control. [ParseChildren(true, "Employees")] [AspNetHostingPermission(SecurityAction.Demand, Level=AspNetHostingPermissionLevel.Minimal)] public sealed class CollectionPropertyControl : Control { private String header; private ArrayList employees = new ArrayList(); public String Header { get { return header; } set { header = value; } } public ArrayList Employees { get { return employees; } } // Override the CreateChildControls method to // add child controls to the Employees property when this // custom control is requested from a page. protected override void CreateChildControls() { Label label = new Label(); label.Text = Header; label.BackColor = System.Drawing.Color.Beige; label.ForeColor = System.Drawing.Color.Red; Controls.Add(label); Controls.Add(new LiteralControl("<BR> <BR>")); Table table = new Table(); TableRow htr = new TableRow(); TableHeaderCell hcell1 = new TableHeaderCell(); hcell1.Text = "Name"; htr.Cells.Add(hcell1); TableHeaderCell hcell2 = new TableHeaderCell(); hcell2.Text = "Title"; htr.Cells.Add(hcell2); TableHeaderCell hcell3 = new TableHeaderCell(); hcell3.Text = "Alias"; htr.Cells.Add(hcell3); table.Rows.Add(htr); table.BorderWidth = 2; table.BackColor = System.Drawing.Color.Beige; table.ForeColor = System.Drawing.Color.Red; foreach (Employee employee in Employees) { TableRow tr = new TableRow(); TableCell cell1 = new TableCell(); cell1.Text = employee.Name; tr.Cells.Add(cell1); TableCell cell2 = new TableCell(); cell2.Text = employee.Title; tr.Cells.Add(cell2); TableCell cell3 = new TableCell(); cell3.Text = employee.Alias; tr.Cells.Add(cell3); table.Rows.Add(tr); } Controls.Add(table); } } }
package ParseChildrenSamples; // When compiling this class, name it ParseChildren.dll. // Create a namespace that defines two classes: one is a custom control // named Employee, which is created for every instance of a child // element with its name declared in a page associated with this namespace , // and the other, named Employees, that contains these child elements. import System.*; import System.Collections.*; import System.Web.*; import System.Web.UI.*; import System.Web.UI.WebControls.*; // The child element class. public class Employee { private String name; private String title; private String alias; public Employee() { this("", "", ""); } //Employee public Employee(String name, String title, String alias) { this.name = name; this.title = title; this.alias = alias; } //Employee /** @property */ public String get_Name() { return name; } //get_Name /** @property */ public void set_Name(String value) { name = value; } //set_Name /** @property */ public String get_Title() { return title; } //get_Title /** @property */ public void set_Title(String value) { title = value; } //set_Title /** @property */ public String get_Alias() { return alias; } //get_Alias /** @property */ public void set_Alias(String value) { alias = value; } //set_Alias } //Employee // Use the ParseChildren attribute to set the ChildrenAsProperties // and DefaultProperty properties. Using this constructor, the // control parses all child controls as properties and must define // a public property named Employees, which it declares as // an ArrayList. Nested (child) elements must correspond to // child elements of the Employees property or to other // properties of the control. /** @attribute ParseChildren(true, "Employees") */ public class CollectionPropertyControl extends Control { private String header; private ArrayList employees = new ArrayList(); /** @property */ public String get_Header() { return header; } //get_Header /** @property */ public void set_Header(String value) { header = value; } //set_Header /** @property */ public ArrayList get_Employees() { return employees; } //get_Employees // Override the CreateChildControls method to // add child controls to the Employees property when this // custom control is requested from a page. protected void CreateChildControls() { Label label = new Label(); label.set_Text(get_Header()); label.set_BackColor(System.Drawing.Color.get_Beige()); label.set_ForeColor(System.Drawing.Color.get_Red()); get_Controls().Add(label); get_Controls().Add(new LiteralControl("<BR> <BR>")); Table table = new Table(); TableRow htr = new TableRow(); TableHeaderCell hCell1 = new TableHeaderCell(); hCell1.set_Text("Name"); htr.get_Cells().Add(hCell1); TableHeaderCell hCell2 = new TableHeaderCell(); hCell2.set_Text("Title"); htr.get_Cells().Add(hCell2); TableHeaderCell hCell3 = new TableHeaderCell(); hCell3.set_Text("Alias"); htr.get_Cells().Add(hCell3); table.get_Rows().Add(htr); table.set_BorderWidth(new Unit(2)); table.set_BackColor(System.Drawing.Color.get_Beige()); table.set_ForeColor(System.Drawing.Color.get_Red()); Employee employee = null; for (int iCtr = 0; iCtr < get_Employees().get_Count(); iCtr++) { employee = (Employee)get_Employees().get_Item(iCtr); TableRow tr = new TableRow(); TableCell cell1 = new TableCell(); cell1.set_Text(employee.get_Name()); tr.get_Cells().Add(cell1); TableCell cell2 = new TableCell(); cell2.set_Text(employee.get_Title()); tr.get_Cells().Add(cell2); TableCell cell3 = new TableCell(); cell3.set_Text(employee.get_Alias()); tr.get_Cells().Add(cell3); table.get_Rows().Add(tr); } get_Controls().Add(table); } //CreateChildControls } //CollectionPropertyControl
次のコード例では、CollectionPropertyControl クラスと Employee クラスを ASP.NET ページで使用する方法を示します。Employee クラスのインスタンスが宣言で追加されます。
<%@ Page Language="VB" %> <%@ Register TagPrefix="AspSample" Assembly="Samples.AspNet.VB.Controls" Namespace="Samples.AspNet.VB.Controls" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) ' Verify attribute values. Dim p As ParseChildrenAttribute = _ Attribute.GetCustomAttribute(GetType(CollectionPropertyControl), _ GetType(ParseChildrenAttribute)) Dim sb As New StringBuilder() sb.Append("The DefaultProperty property is " & p.DefaultProperty.ToString() & "<br>") sb.Append("The ChildrenAsProperties property is " & p.ChildrenAsProperties.ToString() & "<br>") sb.Append("The IsDefaultAttribute method returns " & p.IsDefaultAttribute().ToString()) Message.Text = sb.ToString() End Sub </script> <html > <head id="Head1" runat="server"> <title>PersistChildrenAttribute</title> </head> <body> <form id="Form1" runat="server"> <div> <asp:Label ID="Message" runat="server"/> <AspSample:CollectionPropertyControl id="CollectionPropertyControl1" runat="server"> <AspSample:Employee Name="Employee 1" Title="Title 1" Alias="Alias 1" /> <AspSample:Employee Name="Employee 2" Title="Title 2" Alias="Alias 2" /> </AspSample:CollectionPropertyControl> </div> </form> </body> </html>
<%@ Page Language="C#" Debug="true" %> <%@ Register TagPrefix="AspSample" Assembly="Samples.AspNet.CS.Controls" Namespace="Samples.AspNet.CS.Controls" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> protected void Page_Load(object sender, EventArgs e) { // Verify attribute values. ParseChildrenAttribute p = (ParseChildrenAttribute)Attribute.GetCustomAttribute(typeof(CollectionPropertyControl) , typeof(ParseChildrenAttribute)); StringBuilder sb = new StringBuilder(); sb.Append("The DefaultProperty property is " + p.DefaultProperty.ToString() + "<br>"); sb.Append("The ChildrenAsProperties property is " + p.ChildrenAsProperties.ToString() + "<br>"); sb.Append("The IsDefaultAttribute method returns " + p.IsDefaultAttribute().ToString()); Message.Text = sb.ToString(); } </script> <html > <head runat="server"> <title>ParseChildrenAttribute Example</title> </head> <body> <form runat="server"> <div> <asp:Label ID="Message" runat="server"/> <AspSample:CollectionPropertyControl id="CollectionPropertyControl1" runat="server"> <AspSample:Employee Name="Employee 1" Title="Title 1" Alias="Alias 1" /> <AspSample:Employee Name="Employee 2" Title="Title 2" Alias="Alias 2" /> </AspSample:CollectionPropertyControl> </div> </form> </body> </html>


System.Attribute
System.Web.UI.ParseChildrenAttribute


Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


ParseChildrenAttribute コンストラクタ ()
アセンブリ: System.Web (system.web.dll 内)



Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


ParseChildrenAttribute コンストラクタ (Boolean)
アセンブリ: System.Web (system.web.dll 内)

Dim childrenAsProperties As Boolean Dim instance As New ParseChildrenAttribute(childrenAsProperties)

childrenAsProperties が false の場合、サーバーコントロール内の要素はコントロールとして解析されます。false は ParseChildrenAttribute の既定値です。

このセクションには、2 つのコード例が含まれています。最初のコード例では、ParseChildrenAttribute クラスのプロパティを設定する方法を示します。2 番目のコード例では、ASP.NET ページでクラスを使用する方法を示します。
次のコード例では、CollectionPropertyControl というカスタム サーバー コントロールの ParseChildrenAttribute オブジェクトを設定する方法を示します。CollectionPropertyControl を定義するクラスの前に ParseChildrenAttribute が宣言され、ParseChildrenAttribute が ChildrenAsProperties プロパティを true に設定しています。
Imports System Imports System.Collections Imports System.Web Imports System.Web.UI Imports System.Web.UI.WebControls Imports System.Security.Permissions Namespace Samples.AspNet.VB.Controls ' Create a class that will be rendered as a child of the control ' that has the ParseChildren attribute applied to it. <AspNetHostingPermission(SecurityAction.Demand, _ Level:=AspNetHostingPermissionLevel.Minimal)> _ Public NotInheritable Class Employee Private _name As String Private _title As String Private _alias As String Public Sub New() Me.New("", "", "") End Sub 'New Public Sub New(ByVal name As String, ByVal title As String, ByVal employeeAlias As String) Me._name = name Me._title = title Me._alias = employeeAlias End Sub 'New Public Property Name() As String Get Return _name End Get Set(ByVal value As String) _name = Value End Set End Property Public Property Title() As String Get Return _title End Get Set(ByVal value As String) _title = Value End Set End Property Public Property [Alias]() As String Get Return _alias End Get Set(ByVal value As String) _alias = Value End Set End Property End Class 'Employee ' Use this Boolean version of the ParseChildrenAttribute constructor ' to set the ChildrenAsProperties property to true. Any properties of the ' the CollectionPropertyControl custom control will be used as parsable ' children. <ParseChildren(True)> _ <AspNetHostingPermission(SecurityAction.Demand, _ Level:=AspNetHostingPermissionLevel.Minimal)> _ Public NotInheritable Class CollectionPropertyControl Inherits Control Private _header As String Private _employees As New ArrayList() Public Property Header() As String Get Return _header End Get Set(ByVal value As String) _header = Value End Set End Property Public ReadOnly Property Employees() As ArrayList Get Return _employees End Get End Property ' Override the CreateChildControls method to ' add child controls to the Employees property when this ' custom control is requested from a page. Protected Overrides Sub CreateChildControls() Dim label As New Label() label.Text = Header label.BackColor = System.Drawing.Color.Beige label.ForeColor = System.Drawing.Color.Red Controls.Add(label) Controls.Add(New LiteralControl("<BR> <BR>")) Dim table As New Table() Dim htr As New TableRow() Dim hcell1 As New TableHeaderCell() hcell1.Text = "Name" htr.Cells.Add(hcell1) Dim hcell2 As New TableHeaderCell() hcell2.Text = "Title" htr.Cells.Add(hcell2) Dim hcell3 As New TableHeaderCell() hcell3.Text = "Alias" htr.Cells.Add(hcell3) table.Rows.Add(htr) table.BorderWidth = Unit.Pixel(2) table.BackColor = System.Drawing.Color.Beige table.ForeColor = System.Drawing.Color.Red Dim employee As Employee For Each employee In Employees Dim tr As New TableRow() Dim cell1 As New TableCell() cell1.Text = employee.Name tr.Cells.Add(cell1) Dim cell2 As New TableCell() cell2.Text = employee.Title tr.Cells.Add(cell2) Dim cell3 As New TableCell() cell3.Text = employee.Alias tr.Cells.Add(cell3) table.Rows.Add(tr) Next employee Controls.Add(table) End Sub 'CreateChildControls End Class 'CollectionPropertyControl End Namespace ' ParseChildrenSampleVB_2
using System; using System.Collections; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Security.Permissions; namespace Samples.AspNet.CS.Controls { // Create a class that will be rendered as a child of the control // that has the ParseChildren attribute applied to it. [AspNetHostingPermission(SecurityAction.Demand, Level=AspNetHostingPermissionLevel.Minimal)] public sealed class Employee { private String name; private String title; private String alias; public Employee():this ("" ,"",""){} public Employee (String name, String title, String alias) { this.name = name; this.title = title; this.alias = alias; } public String Name { get { return name; } set { name = value; } } public String Title { get { return title; } set { title = value; } } public String Alias { get { return alias; } set { alias = value; } } } // Use this Boolean version of the ParseChildrenAttribute constructor // to set the ChildrenAsProperties property to true. Any properties of the // the CollectionPropertyControl custom control will be used as parsable // children. [ParseChildren(true)] [AspNetHostingPermission(SecurityAction.Demand, Level=AspNetHostingPermissionLevel.Minimal)] public sealed class CollectionPropertyControl : Control { private String header; private ArrayList employees = new ArrayList(); public String Header { get { return header; } set { header = value; } } public ArrayList Employees { get { return employees; } } // Override the CreateChildControls method to // add child controls to the Employees property when this // custom control is requested from a page. protected override void CreateChildControls() { Label label = new Label(); label.Text = Header; label.BackColor = System.Drawing.Color.Beige; label.ForeColor = System.Drawing.Color.Red; Controls.Add(label); Controls.Add(new LiteralControl("<BR> <BR>")); Table table = new Table(); TableRow htr = new TableRow(); TableHeaderCell hcell1 = new TableHeaderCell(); hcell1.Text = "Name"; htr.Cells.Add(hcell1); TableHeaderCell hcell2 = new TableHeaderCell(); hcell2.Text = "Title"; htr.Cells.Add(hcell2); TableHeaderCell hcell3 = new TableHeaderCell(); hcell3.Text = "Alias"; htr.Cells.Add(hcell3); table.Rows.Add(htr); table.BorderWidth = 2; table.BackColor = System.Drawing.Color.Beige; table.ForeColor = System.Drawing.Color.Red; foreach (Employee employee in Employees) { TableRow tr = new TableRow(); TableCell cell1 = new TableCell(); cell1.Text = employee.Name; tr.Cells.Add(cell1); TableCell cell2 = new TableCell(); cell2.Text = employee.Title; tr.Cells.Add(cell2); TableCell cell3 = new TableCell(); cell3.Text = employee.Alias; tr.Cells.Add(cell3); table.Rows.Add(tr); } Controls.Add(table); } } }
package ParseChildrenSamples_2; // Create a namespace that defines two classes, one a custom control, Employee, // which is created for every instance of a child element with its name // declared in a page associated with this namespace, the other, Employees , // which contains these child elements. import System.*; import System.Collections.*; import System.Web.*; import System.Web.UI.*; import System.Web.UI.WebControls.*; // Create a class that will be rendered as a child of the control // that has the ParseChildren attribute applied to it. public class Employee { private String name; private String title; private String alias; public Employee() { this("", "", ""); } //Employee public Employee(String name, String title, String alias) { this.name = name; this.title = title; this.alias = alias; } //Employee /** @property */ public String get_Name() { return name; } //get_Name /** @property */ public void set_Name(String value) { name = value; } //set_Name /** @property */ public String get_Title() { return title; } //get_Title /** @property */ public void set_Title(String value) { title = value; } //set_Title /** @property * */ public String get_Alias() { return alias; } //get_Alias /** @property */ public void set_Alias(String value) { alias = value; } //set_Alias } //Employee // Use this Boolean version of the ParseChildrenAttribute constructor // to set the ChildrenAsProperties property to true. Any properties of the // the CollectionPropertyControl custom control will be used as parsable // children. /** @attribute ParseChildren(true) */ public class CollectionPropertyControl extends Control { private String header; private ArrayList employees = new ArrayList(); /** @property */ public String get_Header() { return header; } //get_Header /** @property */ public void set_Header(String value) { header = value; } //set_Header /** @property */ public ArrayList get_Employees() { return employees; } //get_Employees // Override the CreateChildControls method to // add child controls to the Employees property when this // custom control is requested from a page. protected void CreateChildControls() { Label label = new Label(); label.set_Text(get_Header()); label.set_BackColor(System.Drawing.Color.get_Beige()); label.set_ForeColor(System.Drawing.Color.get_Red()); get_Controls().Add(label); get_Controls().Add(new LiteralControl("<BR> <BR>")); Table table = new Table(); TableRow htr = new TableRow(); TableHeaderCell hCell1 = new TableHeaderCell(); hCell1.set_Text("Name"); htr.get_Cells().Add(hCell1); TableHeaderCell hCell2 = new TableHeaderCell(); hCell2.set_Text("Title"); htr.get_Cells().Add(hCell2); TableHeaderCell hCell3 = new TableHeaderCell(); hCell3.set_Text("Alias"); htr.get_Cells().Add(hCell3); table.get_Rows().Add(htr); table.set_BorderWidth(new Unit(2)); table.set_BackColor(System.Drawing.Color.get_Beige()); table.set_ForeColor(System.Drawing.Color.get_Red()); Employee employee = null; for (int iCtr = 0; iCtr < get_Employees().get_Count(); iCtr++) { employee = (Employee)get_Employees().get_Item(iCtr); TableRow tr = new TableRow(); TableCell cell1 = new TableCell(); cell1.set_Text(employee.get_Name()); tr.get_Cells().Add(cell1); TableCell cell2 = new TableCell(); cell2.set_Text(employee.get_Title()); tr.get_Cells().Add(cell2); TableCell cell3 = new TableCell(); cell3.set_Text(employee.get_Alias()); tr.get_Cells().Add(cell3); table.get_Rows().Add(tr); } get_Controls().Add(table); } //CreateChildControls } //CollectionPropertyControl
次のコード例では、CollectionPropertyControl クラスと Employee クラスを ASP.NET ページで使用する方法を示します。Employee クラスの 1 つのインスタンスが宣言で追加され、もう 1 つのインスタンスがプログラムで追加されます。
<%@ Page Language="VB" %> <%@ Register TagPrefix="AspSample" Assembly="Samples.AspNet.VB.Controls" Namespace="Samples.AspNet.VB.Controls" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) ' Create a new employee object and add it to custom control. Dim e1 As New Employee("Employee 2", "Title 2", "Alias 2") CollectionPropertyControl1.Employees.Add(e1) ' Verify attribute values. Dim p As ParseChildrenAttribute = _ Attribute.GetCustomAttribute(GetType(CollectionPropertyControl), _ GetType(ParseChildrenAttribute)) Dim sb As New StringBuilder() sb.Append("The ChildControlType property is " & p.ChildControlType.ToString() & "<br>") sb.Append("The ChildrenAsProperties property is " & p.ChildrenAsProperties.ToString() & "<br>") sb.Append("The IsDefaultAttribute method returns " & p.IsDefaultAttribute().ToString()) Message.Text = sb.ToString() End Sub </script> <html > <head id="Head1" runat="server"> <title>PersistChildrenAttribute</title> </head> <body> <form id="Form1" runat="server"> <div> <asp:Label ID="Message" runat="server"/> <AspSample:CollectionPropertyControl id="CollectionPropertyControl1" runat="server"> <Employees> <AspSample:Employee Name="Employee 1" Title="Title 1" Alias="Alias 1" /> </Employees> </AspSample:CollectionPropertyControl> </div> </form> </body> </html>
<%@ Page Language="C#" %> <%@ Register TagPrefix="AspSample" Assembly="Samples.AspNet.CS.Controls" Namespace="Samples.AspNet.CS.Controls" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> protected void Page_Load(object sender, EventArgs e) { // Create a new employee object and add it to the custom control. Employee e1 = new Employee("Employee 2", "Title 2", "Alias 2"); CollectionPropertyControl1.Employees.Add(e1); // Verify attribute values. ParseChildrenAttribute p = (ParseChildrenAttribute)Attribute.GetCustomAttribute(typeof(CollectionPropertyControl) , typeof(ParseChildrenAttribute)); StringBuilder sb = new StringBuilder(); sb.Append("The ChildControlType property is " + p.ChildControlType.ToString() + "<br>"); sb.Append("The ChildrenAsProperties property is " + p.ChildrenAsProperties.ToString() + "<br>"); sb.Append("The IsDefaultAttribute method returns " + p.IsDefaultAttribute().ToString()); Message.Text = sb.ToString(); } </script> <html > <head runat="server"> <title>ParseChildrenAttribute Example</title> </head> <body> <form runat="server"> <div> <asp:Label ID="Message" runat="server"/> <AspSample:CollectionPropertyControl id="CollectionPropertyControl1" runat="server"> <Employees> <AspSample:Employee Name="Employee 1" Title="Title 1" Alias="Alias 1" /> </Employees> </AspSample:CollectionPropertyControl> </div> </form> </body> </html>

Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


ParseChildrenAttribute コンストラクタ (Type)
アセンブリ: System.Web (system.web.dll 内)



Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


ParseChildrenAttribute コンストラクタ (Boolean, String)
アセンブリ: System.Web (system.web.dll 内)

Dim childrenAsProperties As Boolean Dim defaultProperty As String Dim instance As New ParseChildrenAttribute(childrenAsProperties, defaultProperty)


このセクションには、2 つのコード例が含まれています。最初のコード例では、ParseChildrenAttribute クラスのプロパティを設定する方法を示します。2 番目のコード例では、ASP.NET ページでクラスを使用する方法を示します。
次のコード例では、CollectionPropertyControl というカスタム サーバー コントロールの ParseChildrenAttribute オブジェクトを設定する方法を示します。ParseChildrenAttribute は ChildrenAsProperties プロパティを true に設定し、DefaultProperty プロパティを Employee クラスに設定しています。
' Use the ParseChildren attribute to set the ChildrenAsProperties ' and DefaultProperty properties. Using this constructor, the ' control parses all child controls as properties and must define ' a public property named Employees, which it declares as ' an ArrayList. Nested (child) elements must correspond to ' child elements of the Employees property or to other ' properties of the control. <ParseChildren(True, "Employees")> _ <AspNetHostingPermission(SecurityAction.Demand, _ Level:=AspNetHostingPermissionLevel.Minimal)> _ Public NotInheritable Class CollectionPropertyControl Inherits Control Private _header As String Private _employees As New ArrayList() Public Property Header() As String Get Return _header End Get Set(ByVal value As String) _header = Value End Set End Property Public ReadOnly Property Employees() As ArrayList Get Return _employees End Get End Property ' Override the CreateChildControls method to ' add child controls to the Employees property when this ' custom control is requested from a page. Protected Overrides Sub CreateChildControls() Dim label As New Label() label.Text = Header label.BackColor = System.Drawing.Color.Beige label.ForeColor = System.Drawing.Color.Red Controls.Add(label) Controls.Add(New LiteralControl("<BR> <BR>")) Dim table As New Table() Dim htr As New TableRow() Dim hcell1 As New TableHeaderCell() hcell1.Text = "Name" htr.Cells.Add(hcell1) Dim hcell2 As New TableHeaderCell() hcell2.Text = "Title" htr.Cells.Add(hcell2) Dim hcell3 As New TableHeaderCell() hcell3.Text = "Alias" htr.Cells.Add(hcell3) table.Rows.Add(htr) table.BorderWidth = Unit.Pixel(2) table.BackColor = System.Drawing.Color.Beige table.ForeColor = System.Drawing.Color.Red Dim employee As Employee For Each employee In Employees Dim tr As New TableRow() Dim cell1 As New TableCell() cell1.Text = employee.Name tr.Cells.Add(cell1) Dim cell2 As New TableCell() cell2.Text = employee.Title tr.Cells.Add(cell2) Dim cell3 As New TableCell() cell3.Text = employee.Alias tr.Cells.Add(cell3) table.Rows.Add(tr) Next employee Controls.Add(table) End Sub 'CreateChildControls End Class
// Use the ParseChildren attribute to set the ChildrenAsProperties // and DefaultProperty properties. Using this constructor, the // control parses all child controls as properties and must define // a public property named Employees, which it declares as // an ArrayList. Nested (child) elements must correspond to // child elements of the Employees property or to other // properties of the control. [ParseChildren(true, "Employees")] [AspNetHostingPermission(SecurityAction.Demand, Level=AspNetHostingPermissionLevel.Minimal)] public sealed class CollectionPropertyControl : Control { private String header; private ArrayList employees = new ArrayList(); public String Header { get { return header; } set { header = value; } } public ArrayList Employees { get { return employees; } } // Override the CreateChildControls method to // add child controls to the Employees property when this // custom control is requested from a page. protected override void CreateChildControls() { Label label = new Label(); label.Text = Header; label.BackColor = System.Drawing.Color.Beige; label.ForeColor = System.Drawing.Color.Red; Controls.Add(label); Controls.Add(new LiteralControl("<BR> <BR>")); Table table = new Table(); TableRow htr = new TableRow(); TableHeaderCell hcell1 = new TableHeaderCell(); hcell1.Text = "Name"; htr.Cells.Add(hcell1); TableHeaderCell hcell2 = new TableHeaderCell(); hcell2.Text = "Title"; htr.Cells.Add(hcell2); TableHeaderCell hcell3 = new TableHeaderCell(); hcell3.Text = "Alias"; htr.Cells.Add(hcell3); table.Rows.Add(htr); table.BorderWidth = 2; table.BackColor = System.Drawing.Color.Beige; table.ForeColor = System.Drawing.Color.Red; foreach (Employee employee in Employees) { TableRow tr = new TableRow(); TableCell cell1 = new TableCell(); cell1.Text = employee.Name; tr.Cells.Add(cell1); TableCell cell2 = new TableCell(); cell2.Text = employee.Title; tr.Cells.Add(cell2); TableCell cell3 = new TableCell(); cell3.Text = employee.Alias; tr.Cells.Add(cell3); table.Rows.Add(tr); } Controls.Add(table); } }
// Use the ParseChildren attribute to set the ChildrenAsProperties // and DefaultProperty properties. Using this constructor, the // control parses all child controls as properties and must define // a public property named Employees, which it declares as // an ArrayList. Nested (child) elements must correspond to // child elements of the Employees property or to other // properties of the control. /** @attribute ParseChildren(true, "Employees") */ public class CollectionPropertyControl extends Control { private String header; private ArrayList employees = new ArrayList(); /** @property */ public String get_Header() { return header; } //get_Header /** @property */ public void set_Header(String value) { header = value; } //set_Header /** @property */ public ArrayList get_Employees() { return employees; } //get_Employees // Override the CreateChildControls method to // add child controls to the Employees property when this // custom control is requested from a page. protected void CreateChildControls() { Label label = new Label(); label.set_Text(get_Header()); label.set_BackColor(System.Drawing.Color.get_Beige()); label.set_ForeColor(System.Drawing.Color.get_Red()); get_Controls().Add(label); get_Controls().Add(new LiteralControl("<BR> <BR>")); Table table = new Table(); TableRow htr = new TableRow(); TableHeaderCell hCell1 = new TableHeaderCell(); hCell1.set_Text("Name"); htr.get_Cells().Add(hCell1); TableHeaderCell hCell2 = new TableHeaderCell(); hCell2.set_Text("Title"); htr.get_Cells().Add(hCell2); TableHeaderCell hCell3 = new TableHeaderCell(); hCell3.set_Text("Alias"); htr.get_Cells().Add(hCell3); table.get_Rows().Add(htr); table.set_BorderWidth(new Unit(2)); table.set_BackColor(System.Drawing.Color.get_Beige()); table.set_ForeColor(System.Drawing.Color.get_Red()); Employee employee = null; for (int iCtr = 0; iCtr < get_Employees().get_Count(); iCtr++) { employee = (Employee)get_Employees().get_Item(iCtr); TableRow tr = new TableRow(); TableCell cell1 = new TableCell(); cell1.set_Text(employee.get_Name()); tr.get_Cells().Add(cell1); TableCell cell2 = new TableCell(); cell2.set_Text(employee.get_Title()); tr.get_Cells().Add(cell2); TableCell cell3 = new TableCell(); cell3.set_Text(employee.get_Alias()); tr.get_Cells().Add(cell3); table.get_Rows().Add(tr); } get_Controls().Add(table); } //CreateChildControls } //CollectionPropertyControl
次のコード例では、CollectionPropertyControl クラスと Employee クラスを ASP.NET ページで使用する方法を示します。
<%@ Page Language="VB" %> <%@ Register TagPrefix="AspSample" Assembly="Samples.AspNet.VB.Controls" Namespace="Samples.AspNet.VB.Controls" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) ' Verify attribute values. Dim p As ParseChildrenAttribute = _ Attribute.GetCustomAttribute(GetType(CollectionPropertyControl), _ GetType(ParseChildrenAttribute)) Dim sb As New StringBuilder() sb.Append("The DefaultProperty property is " & p.DefaultProperty.ToString() & "<br>") sb.Append("The ChildrenAsProperties property is " & p.ChildrenAsProperties.ToString() & "<br>") sb.Append("The IsDefaultAttribute method returns " & p.IsDefaultAttribute().ToString()) Message.Text = sb.ToString() End Sub </script> <html > <head id="Head1" runat="server"> <title>PersistChildrenAttribute</title> </head> <body> <form id="Form1" runat="server"> <div> <asp:Label ID="Message" runat="server"/> <AspSample:CollectionPropertyControl id="CollectionPropertyControl1" runat="server"> <AspSample:Employee Name="Employee 1" Title="Title 1" Alias="Alias 1" /> <AspSample:Employee Name="Employee 2" Title="Title 2" Alias="Alias 2" /> </AspSample:CollectionPropertyControl> </div> </form> </body> </html>
<%@ Page Language="C#" Debug="true" %> <%@ Register TagPrefix="AspSample" Assembly="Samples.AspNet.CS.Controls" Namespace="Samples.AspNet.CS.Controls" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> protected void Page_Load(object sender, EventArgs e) { // Verify attribute values. ParseChildrenAttribute p = (ParseChildrenAttribute)Attribute.GetCustomAttribute(typeof(CollectionPropertyControl) , typeof(ParseChildrenAttribute)); StringBuilder sb = new StringBuilder(); sb.Append("The DefaultProperty property is " + p.DefaultProperty.ToString() + "<br>"); sb.Append("The ChildrenAsProperties property is " + p.ChildrenAsProperties.ToString() + "<br>"); sb.Append("The IsDefaultAttribute method returns " + p.IsDefaultAttribute().ToString()); Message.Text = sb.ToString(); } </script> <html > <head runat="server"> <title>ParseChildrenAttribute Example</title> </head> <body> <form runat="server"> <div> <asp:Label ID="Message" runat="server"/> <AspSample:CollectionPropertyControl id="CollectionPropertyControl1" runat="server"> <AspSample:Employee Name="Employee 1" Title="Title 1" Alias="Alias 1" /> <AspSample:Employee Name="Employee 2" Title="Title 2" Alias="Alias 2" /> </AspSample:CollectionPropertyControl> </div> </form> </body> </html>

Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


ParseChildrenAttribute コンストラクタ

名前 | 説明 |
---|---|
ParseChildrenAttribute () | ParseChildrenAttribute クラスの新しいインスタンスを初期化します。 |
ParseChildrenAttribute (Boolean) | ChildrenAsProperties プロパティを使用してサーバー コントロール内の要素をサーバー コントロールのプロパティとして解析するかどうかを決定する ParseChildrenAttribute クラスの新しいインスタンスを初期化します。 |
ParseChildrenAttribute (Type) | ChildControlType プロパティを使用してコントロールとして解析するサーバー コントロール内の要素を決定する ParseChildrenAttribute クラスの新しいインスタンスを初期化します。 |
ParseChildrenAttribute (Boolean, String) | childrenAsProperties パラメータと defaultProperty パラメータを使用して、ParseChildrenAttribute クラスの新しいインスタンスを初期化します。 |

ParseChildrenAttribute フィールド

名前 | 説明 | |
---|---|---|
![]() | Default | ParseChildrenAttribute クラスの既定値を定義します。このフィールドは読み取り専用です。 |
![]() | ParseAsChildren | サーバー コントロール内に入れ子になった内容をコントールとして解析することを示します。 |
![]() | ParseAsProperties | サーバー コントロール内に入れ子になった内容をそのコントールのプロパティとして解析することを示します。 |

ParseChildrenAttribute プロパティ

名前 | 説明 | |
---|---|---|
![]() | ChildControlType | 可能なコントロール タイプを示す値を取得します。 |
![]() | ChildrenAsProperties | サーバー コントロール内の要素をプロパティとして解析するかどうかを示す値を取得または設定します。 |
![]() | DefaultProperty | サーバー コントロールの既定のプロパティを取得または設定します。このサーバー コントロールには、要素を解析した結果が格納されます。 |
![]() | TypeId | 派生クラスに実装されている場合は、この Attribute の一意の識別子を取得します。 ( Attribute から継承されます。) |

ParseChildrenAttribute メソッド

名前 | 説明 | |
---|---|---|
![]() | Equals | オーバーロードされます。 オーバーライドされます。 2 つのオブジェクトが等しいかどうかを判断します。 |
![]() | GetCustomAttribute | オーバーロードされます。 アセンブリ、モジュール、型のメンバ、またはメソッド パラメータに適用された指定した型のカスタム属性を取得します。 ( Attribute から継承されます。) |
![]() | GetCustomAttributes | オーバーロードされます。 アセンブリ、モジュール、型のメンバ、またはメソッド パラメータに適用されたカスタム属性の配列を取得します。 ( Attribute から継承されます。) |
![]() | GetHashCode | オーバーライドされます。 ParseChildrenAttribute オブジェクトのハッシュ関数として機能します。 |
![]() | GetType | 現在のインスタンスの Type を取得します。 ( Object から継承されます。) |
![]() | IsDefaultAttribute | オーバーライドされます。 ParseChildrenAttribute クラスの現在のインスタンスの値を派生クラスの既定値にするかどうかを示す値を返します。 |
![]() | IsDefined | オーバーロードされます。 指定した型のカスタム属性が、アセンブリ、モジュール、型のメンバ、またはメソッド パラメータに適用されているかどうかを判断します。 ( Attribute から継承されます。) |
![]() | Match | 派生クラス内でオーバーライドされたときに、指定したオブジェクトとこのインスタンスが等しいかどうかを示す値を返します。 ( Attribute から継承されます。) |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 ( Object から継承されます。) |
![]() | ToString | 現在の Object を表す String を返します。 ( Object から継承されます。) |

名前 | 説明 | |
---|---|---|
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 ( Object から継承されます。) |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 ( Object から継承されます。) |

ParseChildrenAttribute メンバ
ASP.NET サーバー コントロールの開発に使用できるメタデータ属性を定義します。ParseChildrenAttribute クラスを使用して、ページに宣言されているサーバー コントロール タグ内に入れ子になっている内容をページ パーサーがどのように処理するかを示します。このクラスは継承できません。
ParseChildrenAttribute データ型で公開されるメンバを以下の表に示します。


名前 | 説明 | |
---|---|---|
![]() | Default | ParseChildrenAttribute クラスの既定値を定義します。このフィールドは読み取り専用です。 |
![]() | ParseAsChildren | サーバー コントロール内に入れ子になった内容をコントールとして解析することを示します。 |
![]() | ParseAsProperties | サーバー コントロール内に入れ子になった内容をそのコントールのプロパティとして解析することを示します。 |

名前 | 説明 | |
---|---|---|
![]() | ChildControlType | 可能なコントロール タイプを示す値を取得します。 |
![]() | ChildrenAsProperties | サーバー コントロール内の要素をプロパティとして解析するかどうかを示す値を取得または設定します。 |
![]() | DefaultProperty | サーバー コントロールの既定のプロパティを取得または設定します。このサーバー コントロールには、要素を解析した結果が格納されます。 |
![]() | TypeId | 派生クラスに実装されている場合は、この Attribute の一意の識別子を取得します。(Attribute から継承されます。) |

名前 | 説明 | |
---|---|---|
![]() | Equals | オーバーロードされます。 オーバーライドされます。 2 つのオブジェクトが等しいかどうかを判断します。 |
![]() | GetCustomAttribute | オーバーロードされます。 アセンブリ、モジュール、型のメンバ、またはメソッド パラメータに適用された指定した型のカスタム属性を取得します。 (Attribute から継承されます。) |
![]() | GetCustomAttributes | オーバーロードされます。 アセンブリ、モジュール、型のメンバ、またはメソッド パラメータに適用されたカスタム属性の配列を取得します。 (Attribute から継承されます。) |
![]() | GetHashCode | オーバーライドされます。 ParseChildrenAttribute オブジェクトのハッシュ関数として機能します。 |
![]() | GetType | 現在のインスタンスの Type を取得します。 (Object から継承されます。) |
![]() | IsDefaultAttribute | オーバーライドされます。 ParseChildrenAttribute クラスの現在のインスタンスの値を派生クラスの既定値にするかどうかを示す値を返します。 |
![]() | IsDefined | オーバーロードされます。 指定した型のカスタム属性が、アセンブリ、モジュール、型のメンバ、またはメソッド パラメータに適用されているかどうかを判断します。 (Attribute から継承されます。) |
![]() | Match | 派生クラス内でオーバーライドされたときに、指定したオブジェクトとこのインスタンスが等しいかどうかを示す値を返します。 (Attribute から継承されます。) |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 (Object から継承されます。) |
![]() | ToString | 現在の Object を表す String を返します。 (Object から継承されます。) |

名前 | 説明 | |
---|---|---|
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。) |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 (Object から継承されます。) |

- ParseChildrenAttributeのページへのリンク