CatalogPartCollection Класс

Определение

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

public ref class CatalogPartCollection sealed : System::Collections::ReadOnlyCollectionBase
public sealed class CatalogPartCollection : System.Collections.ReadOnlyCollectionBase
type CatalogPartCollection = class
    inherit ReadOnlyCollectionBase
Public NotInheritable Class CatalogPartCollection
Inherits ReadOnlyCollectionBase
Наследование
CatalogPartCollection

Примеры

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

  • Пользовательский элемент управления, позволяющий изменять режимы отображения на странице веб-части.

  • Класс для пользовательского WebPart элемента управления с именем TextDisplayWebPart, на который ссылается веб-страница и содержится в одном из CatalogPart элементов управления.

  • Веб-страница, ссылающаяся на TextDisplayWebPart элемент управления, содержит CatalogZone элемент управления с двумя CatalogPart элементами управления из набора элементов управления веб-части, объявленного в зоне, и содержит код на основе событий для создания объекта и управления CatalogPartCollection им.

  • Объяснение того, как работает пример кода при загрузке в браузере.

Первая часть примера кода — это пользовательский элемент управления. Исходный код пользовательского элемента управления поступает из другого раздела. Для работы этого примера кода необходимо получить ASCX-файл для пользовательского элемента управления из пошагового руководства: изменение режимов отображения в разделе страницы веб-части и поместить файл в ту же папку, что и ASPX-страница в этом примере кода.

Второй частью примера кода является TextDisplayWebPart элемент управления. Для запуска примера кода необходимо скомпилировать этот исходный код. Вы можете скомпилировать ее явным образом и поместить полученную сборку в папку bin веб-сайта или глобальный кэш сборок. Кроме того, исходный код можно поместить в папку App_Code сайта, где он будет динамически скомпилирован во время выполнения. Пошаговое руководство, демонстрирующее оба метода компиляции, см. в разделе "Пошаговое руководство. Разработка и использование пользовательского веб-сервера". Обратите внимание, что элемент управления имеет свойство с именем ContentText; это свойство содержит значение, введенное пользователем в текстовое поле.

using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Security.Permissions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

namespace Samples.AspNet.CS.Controls
{
  [AspNetHostingPermission(SecurityAction.Demand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  [AspNetHostingPermission(SecurityAction.InheritanceDemand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  public class TextDisplayWebPart : WebPart
  {
    private String _contentText = null;
    TextBox input;
    Label DisplayContent;
    Literal lineBreak;

    [Personalizable(), WebBrowsable]
    public String ContentText
    {
      get { return _contentText; }
      set { _contentText = value; }
    }

    protected override void CreateChildControls()
    {
      Controls.Clear();
      DisplayContent = new Label();
      DisplayContent.BackColor = Color.LightBlue;
      DisplayContent.Text = this.ContentText;
      this.Controls.Add(DisplayContent);

      lineBreak = new Literal();
      lineBreak.Text = @"<br />";
      Controls.Add(lineBreak);

      input = new TextBox();
      this.Controls.Add(input);
      Button update = new Button();
      update.Text = "Set Label Content";
      update.Click += new EventHandler(this.submit_Click);
      this.Controls.Add(update);
    }

    private void submit_Click(object sender, EventArgs e)
    {
      // Update the label string.
      if (!string.IsNullOrEmpty(input.Text))
      {
        _contentText = input.Text + @"<br />";
        input.Text = String.Empty;
        DisplayContent.Text = this.ContentText;
      }
    }
  }
}
Imports System.Collections
Imports System.ComponentModel
Imports System.Drawing
Imports System.Security.Permissions
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts

Namespace Samples.AspNet.VB.Controls

  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  Public Class TextDisplayWebPart
    Inherits WebPart
    Private _contentText As String = Nothing
    Private _fontStyle As String = Nothing
    Private input As TextBox
    Private DisplayContent As Label
    Private lineBreak As Literal

    <Personalizable(), WebBrowsable()> _
    Public Property ContentText() As String
      Get
        Return _contentText
      End Get
      Set(ByVal value As String)
        _contentText = value
      End Set
    End Property

    Protected Overrides Sub CreateChildControls()
      Controls.Clear()
      DisplayContent = New Label()
      DisplayContent.BackColor = Color.LightBlue
      DisplayContent.Text = Me.ContentText
      Me.Controls.Add(DisplayContent)

      lineBreak = New Literal()
      lineBreak.Text = "<br />"
      Controls.Add(lineBreak)

      input = New TextBox()
      Me.Controls.Add(input)
      Dim update As New Button()
      update.Text = "Set Label Content"
      AddHandler update.Click, AddressOf Me.submit_Click
      Me.Controls.Add(update)

    End Sub

    Private Sub submit_Click(ByVal sender As Object, _
                             ByVal e As EventArgs)
      ' Update the label string.
      If input.Text <> String.Empty Then
        _contentText = input.Text + "<br />"
        input.Text = String.Empty
        DisplayContent.Text = Me.ContentText
      End If

    End Sub

  End Class

End Namespace

Третья часть примера кода — это веб-страница. Обратите внимание, что <asp:catalogzone> элемент для страницы содержит объявления для двух CatalogPart элементов управления. Эти элементы управления становятся частью пользовательского CatalogPartCollection объекта, создаваемого при выполнении Button1_Click метода. Элемент PageCatalogPart управления содержит элементы управления веб-сервера, которые были ранее закрыты пользователем во время выполнения. Элементы управления в элементе PageCatalogPart управления можно добавить обратно на страницу. Элемент DeclarativeCatalogPart управления содержит объявление пользовательского TextDisplayWebPart элемента управления. Когда страница находится в режиме каталога, пользователь может добавить TextDisplayWebPart элемент управления на страницу, чтобы его можно было использовать в обычном режиме просмотра.

<%@ Page Language="C#" %>
<%@ register TagPrefix="uc1" 
  TagName="DisplayModeMenuCS" 
  Src="DisplayModeMenuCS.ascx" %>
<%@ Register TagPrefix="aspSample"
  Namespace="Samples.AspNet.CS.Controls" 
  Assembly="TextDisplayWebPartCS" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
  // <snippet2>
  protected void Button1_Click(object sender, EventArgs e)
  {
    ArrayList list = new ArrayList(2);
    list.Add(PageCatalogPart1);
    list.Add(DeclarativeCatalogPart1);
    // Pass an ICollection object to the constructor.
    CatalogPartCollection myParts = new CatalogPartCollection(list);
    foreach (CatalogPart catalog in myParts)
    {
      catalog.Description = "My " + catalog.DisplayTitle;
    }

    // Use the IndexOf property to locate a CatalogPart control.
    int PageCatalogPartIndex = myParts.IndexOf(PageCatalogPart1);
    myParts[PageCatalogPartIndex].ChromeType = PartChromeType.TitleOnly;

    // Use the Contains method to see if a CatalogPart control exists.
    if (myParts.Contains(PageCatalogPart1))
    {
      WebPart closedWebPart = null;
      WebPartDescriptionCollection descriptions = PageCatalogPart1.GetAvailableWebPartDescriptions();
      if (descriptions.Count > 0)
      {
        closedWebPart = PageCatalogPart1.GetWebPart(descriptions[0]);
        closedWebPart.AllowClose = false;
      }
    }
    
    // Use indexers to display the details of the CatalogPart controls.
    Label1.Text = String.Empty;
    Label1.Text =
      "<h3>PageCatalogPart Details</h3>" +
      "ID: " + myParts[0].ID + "<br />" +
      "Count: " + myParts[0].GetAvailableWebPartDescriptions().Count;
    Label1.Text += 
      "<h3>DeclarativeCatalogPart Details</h3>" +
      "ID: " + myParts["DeclarativeCatalogPart1"].ID + "<br />" +
      "Count: " + myParts["DeclarativeCatalogPart1"].GetAvailableWebPartDescriptions().Count;
  }
  // </snippet2>
</script> 
 
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>PageCatalogPart Details</title>
</head>
<body>
  <form id="form1" runat="server">
    <asp:WebPartManager ID="WebPartManager1" runat="server" />
    <uc1:DisplayModeMenuCS ID="DisplayModeMenu1" runat="server" />
    <asp:WebPartZone ID="WebPartZone1" runat="server">
      <ZoneTemplate>
        <asp:BulletedList 
          ID="BulletedList1" 
          Runat="server"
          DisplayMode="HyperLink" 
          Title="Favorite Links" >
          <asp:ListItem Value="http://msdn.microsoft.com">
            MSDN
          </asp:ListItem>
          <asp:ListItem Value="http://www.asp.net">
            ASP.NET
          </asp:ListItem>
          <asp:ListItem Value="http://www.msn.com">
            MSN
          </asp:ListItem>
        </asp:BulletedList>
      </ZoneTemplate>
    </asp:WebPartZone>
    <asp:CatalogZone ID="CatalogZone1" runat="server">
      <ZoneTemplate>
        <asp:DeclarativeCatalogPart ID="DeclarativeCatalogPart1" runat="server">
          <WebPartsTemplate>
            <aspSample:TextDisplayWebPart runat="server" 
              id="TextDisplayWebPart1"
              Title="Text Display WebPart" />
          </WebPartsTemplate>
        </asp:DeclarativeCatalogPart>
        <asp:PageCatalogPart ID="PageCatalogPart1" runat="server" />  
      </ZoneTemplate>
    </asp:CatalogZone>
    <hr />
    <asp:Button ID="Button1" 
      runat="server" 
      Text="Display CatalogPart Properties" 
      OnClick="Button1_Click"/>
    <br />
    <asp:Label ID="Label1" runat="server" Text="" /> 
  </form>
</body>
</html>
<%@ Page Language="vb" %>
<%@ register TagPrefix="uc1" 
  TagName="DisplayModeMenuVB" 
  Src="DisplayModeMenuVB.ascx" %>
<%@ Register TagPrefix="aspSample"
  Namespace="Samples.AspNet.VB.Controls" 
  Assembly="TextDisplayWebPartVB" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
' <snippet2>
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) 
    Dim list As New ArrayList(2)
    list.Add(PageCatalogPart1)
    list.Add(DeclarativeCatalogPart1)
    ' Pass an ICollection object to the constructor.
    Dim myParts As New CatalogPartCollection(list)
    Dim catalog As CatalogPart
    For Each catalog In  myParts
        catalog.Description = "My " + catalog.DisplayTitle
    Next catalog
    
    ' Use the IndexOf property to locate a CatalogPart control.
    Dim PageCatalogPartIndex As Integer = _
      myParts.IndexOf(PageCatalogPart1)
    myParts(PageCatalogPartIndex).ChromeType = PartChromeType.TitleOnly
    
    ' Use the Contains method to see if a CatalogPart control exists.
    If myParts.Contains(PageCatalogPart1) Then
        Dim closedWebPart As WebPart = Nothing
        Dim descriptions As WebPartDescriptionCollection = _
          PageCatalogPart1.GetAvailableWebPartDescriptions()
        If descriptions.Count > 0 Then
            closedWebPart = PageCatalogPart1.GetWebPart(descriptions(0))
            closedWebPart.AllowClose = False
        End If
    End If
    
    ' Use indexers to display the details of the CatalogPart controls.
    Label1.Text = String.Empty
    Label1.Text = _
      "<h3>PageCatalogPart Details</h3>" & _
      "ID: " & myParts(0).ID + "<br />" & _
      "Count: " & myParts(0).GetAvailableWebPartDescriptions().Count
    Label1.Text += _
      "<h3>DeclarativeCatalogPart Details</h3>" & _
      "ID: " & myParts("DeclarativeCatalogPart1").ID & "<br />" & _
      "Count: " & myParts("DeclarativeCatalogPart1") _
        .GetAvailableWebPartDescriptions().Count

End Sub 
' </snippet2>
</script>  
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>PageCatalogPart Details</title>
</head>
<body>
  <form id="form1" runat="server">
    <asp:WebPartManager ID="WebPartManager1" runat="server" />
    <uc1:DisplayModeMenuVB ID="DisplayModeMenu1" runat="server" />
    <asp:WebPartZone ID="WebPartZone1" runat="server">
      <ZoneTemplate>
        <asp:BulletedList 
          ID="BulletedList1" 
          Runat="server"
          DisplayMode="HyperLink" 
          Title="Favorite Links" >
          <asp:ListItem Value="http://msdn.microsoft.com">
            MSDN
          </asp:ListItem>
          <asp:ListItem Value="http://www.asp.net">
            ASP.NET
          </asp:ListItem>
          <asp:ListItem Value="http://www.msn.com">
            MSN
          </asp:ListItem>
        </asp:BulletedList>
      </ZoneTemplate>
    </asp:WebPartZone>
    <asp:CatalogZone ID="CatalogZone1" runat="server">
      <ZoneTemplate>
        <asp:DeclarativeCatalogPart ID="DeclarativeCatalogPart1" runat="server">
          <WebPartsTemplate>
            <aspSample:TextDisplayWebPart runat="server" 
              id="TextDisplayWebPart1"
              Title="Text Display WebPart" />
          </WebPartsTemplate>
        </asp:DeclarativeCatalogPart>
        <asp:PageCatalogPart ID="PageCatalogPart1" runat="server" />  
      </ZoneTemplate>
    </asp:CatalogZone>
    <hr />
    <asp:Button ID="Button1" 
      runat="server" 
      Text="Display CatalogPart Properties" 
      OnClick="Button1_Click"/>
    <br />
    <asp:Label ID="Label1" runat="server" Text="" /> 
  </form>
</body>
</html>

При загрузке страницы в браузере можно переключить страницу в режим каталога, выбрав " Каталог " в раскрывающемся списке " Режим отображения ". Чтобы добавить пользовательский WebPart элемент управления на страницу, установите флажок рядом с ним и нажмите кнопку "Добавить". Нажмите кнопку "Закрыть ", чтобы вернуть страницу для просмотра в режиме обзора. Если вы только что добавили элемент управления, щелкните меню команд (стрелка вниз, которая отображается в строке заголовка), а затем нажмите кнопку "Закрыть", элемент управления удаляется со страницы и добавляется в PageCatalogPart элемент управления. Верните страницу в режим каталога и щелкните ссылку "Каталог страниц" , чтобы просмотреть содержимое PageCatalogPart элемента управления. Обратите внимание, что элемент управления, который вы закрыли, появится там. Нажатие кнопки "Свойства display CatalogPart" обращается к объекту CatalogPartCollection и отображает определенные свойства автономных CatalogPart элементов управления.

Комментарии

Класс CatalogPartCollection — это коллекция CatalogPart элементов управления только для чтения, обычно используемая CatalogZoneBase зоной для отслеживания набора CatalogPart элементов управления, содержащихся в зоне.

Когда страница веб-части переходит в режим каталога, зона создает новый CatalogPartCollection объект, состоящий из CatalogPart элементов управления. Каждый CatalogPart элемент управления в коллекции может содержать ссылки на ноль или несколько элементов управления веб-сервера, которые отображаются в виде каталога доступных серверных элементов управления.

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

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

CatalogPartCollection()

Инициализирует новый пустой экземпляр класса CatalogPartCollection.

CatalogPartCollection(CatalogPartCollection, ICollection)

Инициализирует новый экземпляр класса CatalogPartCollection, передавая коллекцию ICollection элементов управления CatalogPart, существующих в зоне, и дополнительную коллекцию элементов управления.

CatalogPartCollection(ICollection)

Инициализирует новый экземпляр класса CatalogPartCollection, передавая в него коллекцию ICollection элементов управления CatalogPart.

Поля

Empty

Ссылается на статический, пустой и доступный только для чтения экземпляр коллекции.

Свойства

Count

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

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

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

(Унаследовано от ReadOnlyCollectionBase)
Item[Int32]

Получает или задает элемент коллекции по его позиции в коллекции.

Item[String]

Возвращает элемент коллекции по уникальному строковому идентификатору.

Методы

Contains(CatalogPart)

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

CopyTo(CatalogPart[], Int32)

Копирует коллекцию в массив объектов CatalogPart.

Equals(Object)

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

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

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

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

Служит хэш-функцией по умолчанию.

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

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

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

Возвращает позицию конкретного элемента коллекции.

MemberwiseClone()

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

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

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

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

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

ICollection.CopyTo(Array, Int32)

Копирует целый массив ReadOnlyCollectionBase в совместимый одномерный массив Array, начиная с заданного индекса целевого массива.

(Унаследовано от ReadOnlyCollectionBase)
ICollection.IsSynchronized

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

(Унаследовано от ReadOnlyCollectionBase)
ICollection.SyncRoot

Получает объект, который позволяет синхронизировать доступ к объекту ReadOnlyCollectionBase.

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

Методы расширения

Cast<TResult>(IEnumerable)

Приводит элементы объекта IEnumerable к заданному типу.

OfType<TResult>(IEnumerable)

Выполняет фильтрацию элементов объекта IEnumerable по заданному типу.

AsParallel(IEnumerable)

Позволяет осуществлять параллельный запрос.

AsQueryable(IEnumerable)

Преобразовывает коллекцию IEnumerable в объект IQueryable.

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

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