CatalogPartCollection 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
包含 CatalogPart 控件的集合,这些控件用于提供最终用户可添加到网页的 Web 服务器控件目录。 此类不能被继承。
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 多个用法。 此代码示例包含四个部分:
一个用户控件,可用于更改 Web 部件页上的显示模式。
名为 的自定义WebPart控件的类,该类在网页中引用,包含在其中一个控件中CatalogPart。
TextDisplayWebPart
引用控件的
TextDisplayWebPart
网页包含一个 CatalogZone 控件,其中包含区域中声明的 Web 部件控件集中的两 CatalogPart 个 CatalogPartCollection 控件,并包含用于创建和操作对象的事件驱动代码。说明代码示例在浏览器中加载时的工作原理。
代码示例的第一部分是用户控件。 用户控件的源代码来自另一个主题。 若要使此代码示例正常工作,需要从 演练:更改 Web 部件页上的显示模式 主题中获取用户控件的 .ascx 文件,并将文件放置在此代码示例中.aspx页所在的文件夹中。
代码示例的第二部分是 TextDisplayWebPart
控件。 若要运行代码示例,必须编译此源代码。 可以显式编译它,并将生成的程序集放入网站的 Bin 文件夹或全局程序集缓存中。 或者,可以将源代码放入站点的“App_Code”文件夹中,并在运行时动态编译源代码。 有关演示这两种编译方法的演练,请参阅 演练:开发和使用自定义 Web 服务器控件。 请注意, 控件有一个名为 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 控件的声明。 这些控件将成为执行 方法时Button1_Click
创建的自定义CatalogPartCollection对象的一部分。 控件 PageCatalogPart 包含以前在运行时由用户关闭的 Web 服务器控件。 控件中的 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 。 请注意,你关闭的控件现在会显示在那里。 单击“ 显示目录”“部分属性” 按钮将 CatalogPartCollection 访问对象并显示包含 CatalogPart 控件的某些属性。
注解
类 CatalogPartCollection 是控件的 CatalogPart 只读集合,通常由 CatalogZoneBase 区域用来跟踪区域包含的 CatalogPart 控件集。
当 Web 部件页进入目录模式时,区域将创建一个由控件组成的CatalogPart新CatalogPartCollection对象。 集合中的每个 CatalogPart 控件都可以包含对零个或多个 Web 服务器控件的引用,这些控件以可用服务器控件目录的形式显示。
例如,如果需要对一 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。 |