WebPartDisplayModeCollection 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
包含 WebPartDisplayMode 物件的集合。 此類別無法獲得繼承。
public ref class WebPartDisplayModeCollection sealed : System::Collections::CollectionBase
public sealed class WebPartDisplayModeCollection : System.Collections.CollectionBase
type WebPartDisplayModeCollection = class
inherit CollectionBase
Public NotInheritable Class WebPartDisplayModeCollection
Inherits CollectionBase
- 繼承
範例
下列程式代碼範例示範如何使用 WebPartDisplayModeCollection 類別。 重點是您必須繼承自 WebPartManager 類別,並覆寫 CreateDisplayModes 方法,以將自定義 WebPartDisplayMode 物件新增至 WebPartDisplayModeCollection 控件所建立的 WebPartManager 集合。
此程式代碼範例有五個部分:
使用者控制元件,可讓您變更網頁元件頁面上的顯示模式。
裝載其他控制件的網頁。
位於 WebPartZone 網頁上區域的使用者控件,可讓您在標籤中輸入和顯示文字。
包含兩個控件的原始碼檔案。 其中一個是自定義 WebPartManager 控件,另一個則是要新增至頁面默認顯示模式的自定義 WebPartDisplayMode 物件。
範例運作方式的說明。
程式代碼範例第一個部分的原始程式碼,可讓您變更顯示模式的使用者控件來自另一個主題。 若要讓此程式代碼範例正常運作,您必須從逐步解說 :變更網頁元件頁面上的顯示模式 主題中取得使用者控件的 .ascx 檔案,並將檔案放在與本程式代碼範例中.aspx頁面相同的資料夾中。
範例的第二個部分是網頁。 它包含兩個 WebPartZone 控件,包括使用者控件和自定義 WebPartManager 控件。
Register
請注意頁面頂端的 指示詞,以參考已編譯控件的使用者控件和命名空間。
<%@ Page Language="C#" %>
<%@ Register Src="TextDisplaycs.ascx"
TagName="TextDisplay"
TagPrefix="uc2" %>
<%@ Register Src="DisplayModeMenuCS.ascx"
TagName="DisplayModeMenuCS"
TagPrefix="uc1" %>
<%@ Register Namespace="Samples.AspNet.CS.Controls"
TagPrefix="sample"
Assembly="CustomDisplayModeCS" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<uc1:DisplayModeMenuCS id="menu1" runat="server" />
<div>
<sample:NewWebPartManager runat="server" ID="wpgm1" />
<br />
<table style="width: 100%">
<tr valign="top" align="center" >
<td style="width: 100px; height: 123px">
<asp:WebPartZone ID="WebPartZone1" runat="server">
<ZoneTemplate>
<uc2:TextDisplay ID="TextDisplay1" runat="server" />
</ZoneTemplate>
</asp:WebPartZone>
</td>
<td style="width: 100px; height: 123px">
<asp:WebPartZone ID="WebPartZone2" runat="server" />
</td>
</tr>
</table>
<br />
</div>
</form>
</body>
</html>
<%@ Page Language="vb" %>
<%@ Register Src="TextDisplayvb.ascx"
TagName="TextDisplay"
TagPrefix="uc2" %>
<%@ Register Src="DisplayModeMenuVB.ascx"
TagName="DisplayModeMenuVB"
TagPrefix="uc1" %>
<%@ Register Namespace="Samples.AspNet.VB.Controls"
TagPrefix="sample"
Assembly="CustomDisplayModeVB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<uc1:DisplayModeMenuVB id="menu1" runat="server" />
<div>
<sample:NewWebPartManager runat="server" ID="wpgm1" />
<br />
<table style="width: 100%">
<tr valign="top" align="center" >
<td style="width: 100px; height: 123px">
<asp:WebPartZone ID="WebPartZone1" runat="server">
<ZoneTemplate>
<uc2:TextDisplay ID="TextDisplay1" runat="server" />
</ZoneTemplate>
</asp:WebPartZone>
</td>
<td style="width: 100px; height: 123px">
<asp:WebPartZone ID="WebPartZone2" runat="server" />
</td>
</tr>
</table>
<br />
</div>
</form>
</body>
</html>
範例的第三個部分是用於輸入和顯示文字的使用者控件。 請注意,它會使用 MultiView 控件建立使用者介面的多個檢視, (UI) 。 其中一個檢視會顯示按鈕,另一個則沒有。 請注意,在覆寫 OnPreRender
的 方法中,程式代碼會檢查頁面目前是否處於自定義顯示模式,如果是,則會顯示使用者控件的第一個檢視,其中包含按鈕。 例如,如果頁面不在自定義顯示模式 (,如果頁面處於瀏覽或設計模式) ,則會隱藏按鈕。
重要
這個範例有一個可接受使用者輸入的文字方塊,這可能會造成安全性威脅。 根據預設,ASP.NET Web 網頁會驗證使用者輸入未包含指令碼或 HTML 項目。 如需詳細資訊,請參閱 Script Exploits Overview (指令碼攻擊概觀)。
<%@ Control Language="C#" %>
<%@ Import Namespace="Samples.AspNet.CS.Controls" %>
<script runat="server">
private string textContent;
[Personalizable]
public string TextContent
{
get { return textContent; }
set { textContent = value; }
}
protected override void OnPreRender(EventArgs e)
{
Label1.Text = this.textContent;
int viewIndex = 0;
WebPartManager wpmg =
WebPartManager.GetCurrentWebPartManager(this.Page);
NewWebPartManager myNewWpmg = wpmg as NewWebPartManager;
if (myNewWpmg != null)
{
WebPartDisplayMode mode =
myNewWpmg.SupportedDisplayModes[myNewWpmg.InLineEditDisplayMode.Name];
if (mode != null && myNewWpmg.DisplayMode == mode)
{
viewIndex = 1;
}
}
this.MultiView1.ActiveViewIndex = viewIndex;
}
protected void Button1_Click(object sender, EventArgs e)
{
this.TextContent = TextBox1.Text;
WebPartManager wpmg =
WebPartManager.GetCurrentWebPartManager(this.Page);
WebPartDisplayMode mode =
wpmg.SupportedDisplayModes[WebPartManager.BrowseDisplayMode.Name];
if (mode != null)
wpmg.DisplayMode = mode;
}
</script>
<asp:MultiView ID="MultiView1" runat="server">
<asp:View ID="View1" runat="server">
<asp:Label ID="Label1" runat="server" Text="Label" />
</asp:View>
<asp:View ID="View2" runat="server">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" OnClick="Button1_Click"
runat="server" Text="Button" />
</asp:View>
</asp:MultiView>
<%@ Control Language="vb" %>
<%@ Import Namespace="Samples.AspNet.VB.Controls" %>
<script runat="server">
Private _textContent As String
<Personalizable()> _
Public Property TextContent() As String
Get
Return _textContent
End Get
Set(ByVal value As String)
_textContent = Value
End Set
End Property
Protected Overrides Sub OnPreRender(ByVal e As EventArgs)
Label1.Text = Me.TextContent
Dim viewIndex As Integer = 0
Dim wpmg As WebPartManager = _
WebPartManager.GetCurrentWebPartManager(Me.Page)
Dim myNewWpmg As NewWebPartManager = _
CType(wpmg, NewWebPartManager)
If Not (myNewWpmg Is Nothing) Then
Dim mode As WebPartDisplayMode = _
myNewWpmg.SupportedDisplayModes(myNewWpmg.InLineEditDisplayMode.Name)
If Not (mode Is Nothing) AndAlso _
myNewWpmg.DisplayMode Is mode Then
viewIndex = 1
End If
End If
Me.MultiView1.ActiveViewIndex = viewIndex
End Sub
Protected Sub Button1_Click(ByVal sender As Object, _
ByVal e As EventArgs)
Me.TextContent = TextBox1.Text
Dim wpmg As WebPartManager = _
WebPartManager.GetCurrentWebPartManager(Me.Page)
Dim mode As WebPartDisplayMode = _
wpmg.SupportedDisplayModes(WebPartManager.BrowseDisplayMode.Name)
If Not (mode Is Nothing) Then
wpmg.DisplayMode = mode
End If
End Sub
</script>
<asp:MultiView ID="MultiView1" runat="server">
<asp:View ID="View1" runat="server">
<asp:Label ID="Label1" runat="server" Text="Label" />
</asp:View>
<asp:View ID="View2" runat="server">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" OnClick="Button1_Click"
runat="server" Text="Button" />
</asp:View>
</asp:MultiView>
範例的第四個部分是兩個自定義類別的來源檔案。 請注意,自定義 WebPartManager 類別會 CreateDisplayModes 覆寫 方法、呼叫基底方法來新增所有默認顯示模式,然後新增自定義顯示模式。 自定義顯示模式類別 InLineEditDisplayMode
只會繼承自 WebPartDisplayMode、在建構函式中設定顯示模式的名稱,並覆寫一些基底屬性,以建立自定義顯示器的特性。
若要執行程式碼範例,您必須編譯此原始程式碼。 您可以明確地編譯它,並將產生的元件放在網站的 Bin 資料夾或全域程式集緩存中。 或者,您可以將原始程式碼放在月臺的 App_Code資料夾中,其將在運行時間動態編譯。 如需示範如何編譯的逐步解說,請參閱逐步解說 :開發和使用自定義 Web 伺服器控制件。
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Security.Permissions;
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 NewWebPartManager : WebPartManager
{
private static readonly WebPartDisplayMode _inLineEditDisplayMode =
new InlineWebPartEditDisplayMode();
public NewWebPartManager() {}
protected override WebPartDisplayModeCollection CreateDisplayModes()
{
WebPartDisplayModeCollection displayModes =
base.CreateDisplayModes();
displayModes.Add(_inLineEditDisplayMode);
return displayModes;
}
public WebPartDisplayMode InLineEditDisplayMode
{
get { return _inLineEditDisplayMode; }
}
private sealed class InlineWebPartEditDisplayMode : WebPartDisplayMode
{
public InlineWebPartEditDisplayMode()
: base("Inline Edit Display")
{
}
public override bool AllowPageDesign
{
get { return true; }
}
public override bool RequiresPersonalization
{
get { return true; }
}
public override bool ShowHiddenWebParts
{
get { return false; }
}
public override bool AssociatedWithToolZone
{
get { return false; }
}
public override bool IsEnabled(WebPartManager webPartManager)
{
return true;
}
}
}
}
Imports System.Collections.Generic
Imports System.Configuration
Imports System.Web
Imports System.Web.Security
Imports System.Security.Permissions
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 NewWebPartManager
Inherits WebPartManager
Private Shared _inLineEditDisplayMode As WebPartDisplayMode = _
New InlineWebPartEditDisplayMode()
Public Sub New()
End Sub
Protected Overrides Function CreateDisplayModes() As WebPartDisplayModeCollection
Dim displayModes As WebPartDisplayModeCollection = MyBase.CreateDisplayModes()
displayModes.Add(_inLineEditDisplayMode)
Return displayModes
End Function
Public ReadOnly Property InLineEditDisplayMode() As WebPartDisplayMode
Get
Return _inLineEditDisplayMode
End Get
End Property
Private NotInheritable Class InlineWebPartEditDisplayMode
Inherits WebPartDisplayMode
Public Sub New()
MyBase.New("Inline Edit Display")
End Sub
Public Overrides ReadOnly Property AllowPageDesign() As Boolean
Get
Return True
End Get
End Property
Public Overrides ReadOnly Property RequiresPersonalization() _
As Boolean
Get
Return True
End Get
End Property
Public Overrides ReadOnly Property ShowHiddenWebParts() As Boolean
Get
Return False
End Get
End Property
Public Overrides ReadOnly Property AssociatedWithToolZone() _
As Boolean
Get
Return False
End Get
End Property
Public Overrides Function IsEnabled(ByVal webPartManager _
As WebPartManager) As Boolean
Return True
End Function
End Class
End Class
End Namespace
若要執行程式碼範例,請在瀏覽器中載入頁面。 請注意,頁面目前處於流覽模式,而且看不到任何按鈕。 使用 [ 顯示模式 ] 下拉式清單控件,將頁面變更為 [ 內嵌編輯顯示 模式],並注意現在按鈕會顯示在較低的使用者控件中。 新增一些文字,然後按下按鈕來更新控制項。 請注意,頁面顯示會傳回至流覽模式、您輸入的文字現在會顯示,而且按鈕會再次隱藏,因為頁面不在自定義顯示模式中。
備註
類別 WebPartDisplayModeCollection 的設計目的是要包含物件的集合 WebPartDisplayMode 。 它主要是由 WebPartManager 控件用來管理物件的集合 WebPartDisplayMode 。
顯示模式是網頁的特殊檢視,當網頁被指派為屬性上的 WebPartManager.DisplayMode 目前顯示模式時,就會顯示。 顯示模式用於網頁元件控件集,以建立頁面檢視,讓使用者可以執行特殊工作,例如編輯控件,或重新排列頁面的配置。 控制項 WebPartManager 會定義數種顯示模式,包括 BrowseDisplayMode、 DesignDisplayMode、 EditDisplayMode、 CatalogDisplayMode和 ConnectDisplayMode。 屬性會 WebPartManager.DisplayModes 參考顯示模式的集合。
在任何使用網頁元件控制件的特定網頁上,只能使用特定顯示模式。 默認流覽模式和設計模式幾乎一律可用,但其他顯示模式只有在頁面上有對應的區域類型時才可使用。 如需詳細資訊,請參閱 類別概 WebPartDisplayMode 觀。
控件 WebPartManager 會追蹤頁面上具有其 SupportedDisplayModes 屬性的可用顯示模式。 這個屬性會參考 WebPartDisplayModeCollection 物件,其中包含所有支持的顯示模式。
類別 WebPartDisplayModeCollection 沒有公開的建構函式,因此您無法建立自己的新實例。 如果您建立自定義 WebPartDisplayMode 物件,並想要成為 控件中受支持顯示模式 WebPartManager 集合的一部分,則必須繼承自 WebPartManager 類別、覆寫 CreateDisplayModes 方法、呼叫基底方法以建立集合,然後使用其 Add 方法將任何自定義顯示模式新增至集合。
類別 WebPartDisplayModeCollection 有兩個公用屬性。 屬性 IsReadOnly 是只讀屬性,指出集合是否為唯讀。 多載 Item[] 屬性提供集合成員的存取權。
類別 WebPartDisplayModeCollection 也有數種方法。 方法 Add 已提及,可讓您將 物件新增 WebPartDisplayMode 至集合。 方法 Contains 會判斷集合中是否存在特定的顯示模式。 方法 CopyTo 會將集合複製到 物件的陣列。 方法 IndexOf 會傳回集合內特定顯示模式的索引。 最後, Insert 方法可讓您在集合中的特定索引插入顯示模式物件。
屬性
Capacity |
取得或設定 CollectionBase 可包含的項目數目。 (繼承來源 CollectionBase) |
Count |
取得 CollectionBase 執行個體中包含的元素數目。 這個屬性無法覆寫。 (繼承來源 CollectionBase) |
InnerList |
取得包含 ArrayList 執行個體中之元素清單的 CollectionBase。 (繼承來源 CollectionBase) |
IsReadOnly |
取得值,表示集合是否為唯讀。 |
Item[Int32] |
根據索引,取得集合的特定成員。 |
Item[String] |
根據唯一識別項,取得集合的特定成員。 |
List |
取得包含 IList 執行個體中之元素清單的 CollectionBase。 (繼承來源 CollectionBase) |
方法
明確介面實作
ICollection.CopyTo(Array, Int32) |
從目標陣列的指定索引開始,將整個 CollectionBase 複製到相容的一維 Array。 (繼承來源 CollectionBase) |
ICollection.IsSynchronized |
取得值,這個值表示對 CollectionBase 的存取是否同步 (安全執行緒)。 (繼承來源 CollectionBase) |
ICollection.SyncRoot |
取得可用以同步存取 CollectionBase 的物件。 (繼承來源 CollectionBase) |
IList.Add(Object) |
將物件加入至 CollectionBase 的末端。 (繼承來源 CollectionBase) |
IList.Contains(Object) |
判斷 CollectionBase 是否包含特定項目。 (繼承來源 CollectionBase) |
IList.IndexOf(Object) |
搜尋指定的 Object,並傳回在整個 CollectionBase 中第一個符合項目之以零為起始的索引。 (繼承來源 CollectionBase) |
IList.Insert(Int32, Object) |
將項目插入至 CollectionBase 中指定的索引位置。 (繼承來源 CollectionBase) |
IList.IsFixedSize |
取得值,指出 CollectionBase 是否有固定的大小。 (繼承來源 CollectionBase) |
IList.IsReadOnly |
取得值,指出 CollectionBase 是否唯讀。 (繼承來源 CollectionBase) |
IList.Item[Int32] |
在指定的索引位置上取得或設定項目。 (繼承來源 CollectionBase) |
IList.Remove(Object) |
從 CollectionBase 移除特定物件之第一個符合的元素。 (繼承來源 CollectionBase) |
擴充方法
Cast<TResult>(IEnumerable) |
將 IEnumerable 的項目轉換成指定的型別。 |
OfType<TResult>(IEnumerable) |
根據指定的型別來篩選 IEnumerable 的項目。 |
AsParallel(IEnumerable) |
啟用查詢的平行化作業。 |
AsQueryable(IEnumerable) |
將 IEnumerable 轉換成 IQueryable。 |