PersistChildrenAttribute Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Definuje atribut, který je používán ovládacími prvky serveru ASP.NET k označení, zda vnořený obsah obsažený v ovládacím prvku serveru odpovídá ovládacím prvkům nebo vlastnostem serverového ovládacího prvku. Tato třída se nemůže dědit.
public ref class PersistChildrenAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Class)]
public sealed class PersistChildrenAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Class)>]
type PersistChildrenAttribute = class
inherit Attribute
Public NotInheritable Class PersistChildrenAttribute
Inherits Attribute
- Dědičnost
- Atributy
Příklady
Příklad kódu v této části obsahuje dvě části. První příklad kódu ukazuje, jak nastavit metadata vlastního ovládacího prvku tak, aby v době návrhu byl jeho vnořený obsah zachován jako vlastnosti ovládacího prvku. Druhý příklad kódu ukazuje, jak používat třídy na ASP.NET stránce.
Následující příklad kódu ukazuje, jak použít PersistChildrenAttribute atribut tak, aby žádný z vnořených ovládacích prvků vlastního serveru nebyl zachován jako vnořené ovládací prvky. Ovládací prvek vlastního PersistChildrenAttribute serveru s názvem CollectionPropertyControl
má atribut nastavený nafalse
, Employee
aby přidané objekty byly zachovány jako vnořené prvky.
using System;
using System.Collections;
using System.Drawing;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Security.Permissions;
namespace PersistChildrenSamples
{
// 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 PersistChildren attribute to set the Persist
// property to false so that none of this class's
// child controls will be persisted as controls. They will
// be persisted only as child elements of this class.
// If you set the PersistChildren attribute to true, or if you
// do not include this attribute when you create a control,
// the child controls will be persisted as controls.
[PersistChildren(false)]
[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 = Color.Beige;
label.ForeColor = 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 = Color.Beige;
table.ForeColor = 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);
}
}
}
' 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.
Imports System.Collections
Imports System.Drawing
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Security.Permissions
Namespace PersistChildrenSampleVB
' 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
Public Sub New(name As String, title As String, employeeAlias As String)
Me._name = name
Me._title = title
Me._alias = employeeAlias
End Sub
Public Property Name() As String
Get
Return _name
End Get
Set
_name = value
End Set
End Property
Public Property Title() As String
Get
Return _title
End Get
Set
_title = value
End Set
End Property
Public Property [Alias]() As String
Get
Return _alias
End Get
Set
_alias = value
End Set
End Property
End Class
' Use the PersistChildren attribute to set the Persist
' property to false so that none of this class's
' child controls will be persisted as controls. They will
' be persisted only as child elements of this class.
' If you set the PersistChildren attribute to true, or if you
' do not include this attribute when you create a control,
' the child controls will be persisted as controls.
<PersistChildren(False)> _
<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
_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 = Color.Beige
label.ForeColor = 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 = Color.Beige
table.ForeColor = 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
End Class
End Namespace ' PersistChildrenSampleVB
Následující příklad kódu ukazuje, jak používat CollectionPropertyControl
třídy a Employee
na stránce ASP.NET.
<%@ Page Language="C#" %>
<%@ Register TagPrefix="AspSample" Assembly="Samples.AspNet.CS.Controls" Namespace="PersistChildrenSamples" %>
<!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 two new employees and add them to the custom control.
Employee e1 = new Employee("Employee 1", "Title 1", "Alias 1");
Employee e2 = new Employee("Employee 2", "Title 2", "Alias 2");
CollectionPropertyControl1.Employees.Add(e1);
CollectionPropertyControl1.Employees.Add(e2);
// Verify attribute values.
PersistChildrenAttribute p =
(PersistChildrenAttribute)Attribute.GetCustomAttribute(typeof(CollectionPropertyControl),
typeof(PersistChildrenAttribute));
StringBuilder sb = new StringBuilder();
sb.Append("The Persist property is " + p.Persist.ToString() + "<br />");
sb.Append("The UseCustomPersistence property is " + p.UsesCustomPersistence.ToString() + "<br />");
sb.Append("The IsDefault method returns " + p.IsDefaultAttribute().ToString());
Message.Text = sb.ToString();
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head 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:CollectionPropertyControl>
</div>
</form>
</body>
</html>
<%@ Page Language="VB" %>
<%@ Register TagPrefix="AspSample" Assembly="Samples.AspNet.VB.Controls" Namespace="PersistChildrenSampleVB" %>
<!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 two new employees and add them to the custom control.
Dim e1 As New Employee("Employee 1", "Title 1", "Alias 1")
Dim e2 As New Employee("Employee 2", "Title 2", "Alias 2")
CollectionPropertyControl1.Employees.Add(e1)
CollectionPropertyControl1.Employees.Add(e2)
' Verify attribute values.
Dim p As PersistChildrenAttribute = _
Attribute.GetCustomAttribute(GetType(CollectionPropertyControl), _
GetType(PersistChildrenAttribute))
Dim sb As New StringBuilder()
sb.Append("The Persist property is " & p.Persist.ToString() & "<br />")
sb.Append("The UseCustomPersistence property is " & p.UsesCustomPersistence.ToString() & "<br />")
sb.Append("The IsDefault method returns " & p.IsDefaultAttribute().ToString())
Message.Text = sb.ToString()
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<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:CollectionPropertyControl>
</div>
</form>
</body>
</html>
Poznámky
Slouží PersistChildrenAttribute v kombinaci s nástrojem ParseChildrenAttribute k určení způsobu interpretace vnořeného obsahu ovládacího prvku. Pokud PersistChildrenAttribute je true
a ParseChildrenAttribute je false
, vnořený obsah obsažený v ovládacím prvku serveru ASP.NET se zachová jako ovládací prvky. Pokud PersistChildrenAttribute je false
a ParseChildrenAttribute je true
, vnořený obsah se zachová jako vlastnosti serverového ovládacího prvku. Další informace o používání atributů najdete v tématu Atributy.
Konstruktory
PersistChildrenAttribute(Boolean) |
Inicializuje novou instanci PersistChildrenAttribute třídy pomocí logické hodnoty označující, zda se má zachovat vnořený obsah jako vnořené ovládací prvky. |
PersistChildrenAttribute(Boolean, Boolean) |
Inicializuje novou instanci PersistChildrenAttribute třídy pomocí dvou logických hodnot. Jeden označující, zda se má zachovat vnořený obsah jako vnořený ovládací prvek, a druhý určující, zda se má použít vlastní metoda trvalosti. |
Pole
Default |
Označuje výchozí stav atributu. Pole Default je jen pro čtení. |
No |
Označuje, že vnořený obsah by neměl v době návrhu přetrvávat jako vnořené ovládací prvky. Toto pole je jen ke čtení. |
Yes |
Označuje, že vnořený obsah by měl v době návrhu přetrvávat jako ovládací prvky. Pole Yes je jen pro čtení. |
Vlastnosti
Persist |
Získá hodnotu, která označuje, zda je vnořený obsah trvale zachován jako vnořené ovládací prvky v době návrhu. |
TypeId |
Při implementaci v odvozené třídě získá jedinečný identifikátor pro tuto Attributetřídu . (Zděděno od Attribute) |
UsesCustomPersistence |
Získá hodnotu určující, zda serverový ovládací prvek poskytuje vlastní trvalost vnořených ovládacích prvků v době návrhu. |
Metody
Equals(Object) |
Určí, zda se zadaný objekt rovná aktuálnímu objektu. |
GetHashCode() |
Slouží jako hashovací funkce pro PersistChildrenAttribute třídu. |
GetType() |
Získá aktuální Type instanci. (Zděděno od Object) |
IsDefaultAttribute() |
Vrátí hodnotu označující, zda je hodnota aktuální instance PersistChildrenAttribute třídy výchozí hodnotou odvozené třídy. |
Match(Object) |
Při přepsání v odvozené třídě vrátí hodnotu, která označuje, zda se tato instance rovná zadanému objektu. (Zděděno od Attribute) |
MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Objectsouboru . (Zděděno od Object) |
ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |
Explicitní implementace rozhraní
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Mapuje sadu názvů na odpovídající sadu identifikátorů pro rozesílání. (Zděděno od Attribute) |
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Načte informace o typu objektu, které lze použít k získání informací o typu pro rozhraní. (Zděděno od Attribute) |
_Attribute.GetTypeInfoCount(UInt32) |
Získá počet rozhraní typu informací, které objekt poskytuje (0 nebo 1). (Zděděno od Attribute) |
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Poskytuje přístup k vlastnostem a metodám vystaveným objektem. (Zděděno od Attribute) |