Прочитать на английском

Поделиться через


PersistChildrenAttribute Класс

Определение

Определяет атрибут, который используется ASP.NET серверными элементами управления для указания во время разработки, соответствует ли вложенное содержимое, которое содержится в серверном элементе управления, элементам управления или свойствам серверного элемента управления. Этот класс не наследуется.

[System.AttributeUsage(System.AttributeTargets.Class)]
public sealed class PersistChildrenAttribute : Attribute
Наследование
PersistChildrenAttribute
Атрибуты

Примеры

Пример кода в этом разделе содержит две части. В первом примере кода показано, как задать метаданные пользовательского элемента управления таким образом, чтобы во время разработки его вложенное содержимое сохранялось как свойства элемента управления . Во втором примере кода показано, как использовать классы на странице ASP.NET.

В следующем примере кода показано, как применить PersistChildrenAttribute атрибут , чтобы ни один из вложенных элементов управления пользовательского серверного элемента управления не сохранялся как вложенные элементы управления. Пользовательский серверный элемент управления с именем CollectionPropertyControl имеет PersistChildrenAttribute атрибут , который имеет значение false , Employee чтобы добавляемые объекты сохранялись как вложенные элементы.

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);
      }
   }
}

В следующем примере кода показано, как использовать классы CollectionPropertyControl и Employee на странице 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>

Комментарии

PersistChildrenAttribute Используется в сочетании с , ParseChildrenAttribute чтобы определить, как интерпретируется вложенное содержимое элемента управления. Если PersistChildrenAttribute имеет значение true и ParseChildrenAttribute имеет значение false, то вложенное содержимое, содержащееся в серверном элементе управления ASP.NET, сохраняется как элементы управления. Если PersistChildrenAttribute имеет значение false , а ParseChildrenAttribute имеет значение true, вложенное содержимое сохраняется как свойства серверного элемента управления. Дополнительные сведения об использовании атрибутов см. в разделе Атрибуты.

Конструкторы

PersistChildrenAttribute(Boolean)

Выполняет инициализацию нового экземпляра класса PersistChildrenAttribute, используя логическое значение, которое определяет, сохраняется ли вложенное содержимое как вложенные элементы управления.

PersistChildrenAttribute(Boolean, Boolean)

Инициализирует новый экземпляр класса PersistChildrenAttribute с помощью двух логических значений. Первое означает, сохранить ли вложенное содержимое как вложенные элементы управления; второе означает, использовать ли пользовательский метод сохраняемости.

Поля

Default

Определяет состояние атрибута по умолчанию. Поле Default доступно только для чтения.

No

Указывает, что вложенное содержимое не сохраняется как вложенные элементы управления во время разработки. Это поле доступно только для чтения.

Yes

Указывает, что вложенное содержимое сохраняется как элементы управления во время разработки. Поле Yes доступно только для чтения.

Свойства

Persist

Возвращает значение, определяющее, сохраняется ли во время разработки вложенное содержимое как вложенные элементы управления.

TypeId

В случае реализации в производном классе возвращает уникальный идентификатор для этого атрибута Attribute.

(Унаследовано от Attribute)
UsesCustomPersistence

Возвращает значение, определяющее, обеспечивает ли серверный элемент управления пользовательскую сохраняемость вложенных элементов управления во время разработки.

Методы

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

GetHashCode()

Служит хэш-функцией для класса PersistChildrenAttribute.

GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
IsDefaultAttribute()

Возвращает значение, указывающее является ли значение текущего экземпляра класса PersistChildrenAttribute значением по умолчанию производного класса.

Match(Object)

При переопределении в производном классе возвращает значение, указывающее, является ли этот экземпляр равным заданному объекту.

(Унаследовано от Attribute)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Явные реализации интерфейса

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации.

(Унаследовано от Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Возвращает сведения о типе объекта, которые можно использовать для получения сведений о типе интерфейса.

(Унаследовано от Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1).

(Унаследовано от Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Предоставляет доступ к открытым свойствам и методам объекта.

(Унаследовано от Attribute)

Применяется к

Продукт Версии
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

См. также раздел