WebPartDisplayModeCollection 類別

定義

包含 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

範例

下列程式碼範例示範如何使用 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 會定義數種顯示模式,包括 BrowseDisplayModeDesignDisplayModeEditDisplayModeCatalogDisplayModeConnectDisplayMode 。 屬性會 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)

方法

Add(WebPartDisplayMode)

WebPartDisplayMode 物件加入至集合。

Clear()

CollectionBase 執行個體移除所有的物件。 無法覆寫這個方法。

(繼承來源 CollectionBase)
Contains(WebPartDisplayMode)

傳回值,指出特定的 WebPartDisplayMode 物件是否存在於集合。

CopyTo(WebPartDisplayMode[], Int32)

複製集合至 WebPartDisplayMode 物件的陣列。

Equals(Object)

判斷指定的物件是否等於目前的物件。

(繼承來源 Object)
GetEnumerator()

傳回可逐一查看 CollectionBase 執行個體的列舉值。

(繼承來源 CollectionBase)
GetHashCode()

做為預設雜湊函式。

(繼承來源 Object)
GetType()

取得目前執行個體的 Type

(繼承來源 Object)
IndexOf(WebPartDisplayMode)

傳回集合特定成員的位置。

Insert(Int32, WebPartDisplayMode)

WebPartDisplayMode 物件插入至位於指定之索引位置的集合。

MemberwiseClone()

建立目前 Object 的淺層複製。

(繼承來源 Object)
OnClear()

在清除 CollectionBase 執行個體的內容之後,執行額外的自訂處理序。

(繼承來源 CollectionBase)
OnClearComplete()

在清除 CollectionBase 執行個體的內容後,執行額外的自訂處理序。

(繼承來源 CollectionBase)
OnInsert(Int32, Object)

在將新的元素插入至 CollectionBase 執行個體前,執行額外的自訂處理序。

(繼承來源 CollectionBase)
OnInsertComplete(Int32, Object)

在將新的元素插入至 CollectionBase 執行個體後,執行額外的自訂處理序。

(繼承來源 CollectionBase)
OnRemove(Int32, Object)

當從 CollectionBase 執行個體移除元素時,執行額外的自訂處理序。

(繼承來源 CollectionBase)
OnRemoveComplete(Int32, Object)

在從 CollectionBase 執行個體移除元素後,執行額外的自訂處理序。

(繼承來源 CollectionBase)
OnSet(Int32, Object, Object)

CollectionBase 執行個體中設定數值前,執行額外的自訂處理序。

(繼承來源 CollectionBase)
OnSetComplete(Int32, Object, Object)

CollectionBase 執行個體中設定數值後,執行額外的自訂處理序。

(繼承來源 CollectionBase)
OnValidate(Object)

當驗證數值時,執行額外的自訂處理序。

(繼承來源 CollectionBase)
RemoveAt(Int32)

移除 CollectionBase 執行個體之指定索引的元素。 這個方法不可覆寫。

(繼承來源 CollectionBase)
ToString()

傳回代表目前物件的字串。

(繼承來源 Object)

明確介面實作

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

適用於

另請參閱