WebPartManager.CloseWebPart(WebPart) 方法

定義

關閉 WebPart 控制項,使其不會在網頁上呈現,但可重新開啟。

public:
 void CloseWebPart(System::Web::UI::WebControls::WebParts::WebPart ^ webPart);
public void CloseWebPart (System.Web.UI.WebControls.WebParts.WebPart webPart);
member this.CloseWebPart : System.Web.UI.WebControls.WebParts.WebPart -> unit
Public Sub CloseWebPart (webPart As WebPart)

參數

webPart
WebPart

WebPart 中正在關閉的 WebPartZoneBase 或伺服器控制項。

例外狀況

webPartnull

webPart 不在 Controls 集合中。

-或-

webPart 是共用控制項,並且已經被另一個使用者關閉。

範例

下列程式碼範例會示範如何使用 CloseWebPart 方法。

程式碼範例有四個部分:

  • 可讓您變更頁面顯示模式的使用者控制項。

  • 自訂 WebPart 控制項。

  • 網頁。

  • 說明範例在瀏覽器中的運作方式。

程式碼範例的第一個部分是變更顯示模式的使用者控制項。 您可以從類別概觀的 Example 區段取得使用者控制項的 WebPartManager 原始程式碼。 如需顯示模式和使用者控制項運作方式的詳細資訊,請參閱逐步解說 :變更網頁元件頁面上的顯示模式

程式碼範例的第二個部分是自訂 WebPart 控制項。 若要執行程式碼範例,您必須編譯此原始程式碼。 您可以明確地編譯它,並將產生的元件放在網站的 Bin 資料夾或全域組件快取中。 或者,您可以將原始程式碼放在月臺的 App_Code 資料夾中,其將在執行時間動態編譯。 此範例使用動態編譯方法;因此,這個控制項在網頁頂端的 指示詞中 Register 沒有 Assembly 屬性。 如需示範如何編譯的逐步解說,請參閱逐步解說 :開發和使用自訂 Web 服務器控制項

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

程式碼範例的第三個部分是網頁。 頁面包含 CatalogZone 區域,其中已宣告元素 <asp:pagecatalogpart> 。 這是將包含關閉 WebPart 的控制項,並讓使用者將它新增回頁面。 方法 Button1_Click 會直接呼叫 CloseWebPart 方法來關閉自訂 WebPart 控制項,不過使用者也可以透過動詞功能表關閉控制項。

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

<!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 Button1_Click(object sender, EventArgs e)
  {
    mgr1.CloseWebPart(text1);
  }
  
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
      <asp:WebPartManager ID="mgr1" runat="server" />
      <uc1:DisplayModeMenuCS ID="menu1" runat="server" />
      <asp:WebPartZone ID="WebPartZone1" runat="server">
        <ZoneTemplate>
          <aspSample:TextDisplayWebPart ID="text1" 
            runat="server" 
            Title="My Text WebPart" />
        </ZoneTemplate>
      </asp:WebPartZone>
      <asp:CatalogZone ID="CatalogZone1" runat="server">
        <ZoneTemplate>
          <asp:PageCatalogPart ID="PageCatalogPart1" runat="server" />   
        </ZoneTemplate>
      </asp:CatalogZone>
      <asp:Button ID="Button1" runat="server" 
        Text="Close WebPart" 
        OnClick="Button1_Click" />
    </form>
</body>
</html>
<%@ Page Language="vb" %>
<%@ Register TagPrefix="uc1" 
    TagName="DisplayModeMenuVB"
    Src="~/DisplayModeMenuVB.ascx" %>
<%@ Register TagPrefix="aspSample" 
    Namespace="Samples.AspNet.VB.Controls"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
  
  Protected Sub Button1_Click(ByVal sender As Object, _
    ByVal e As System.EventArgs)
    
    mgr1.CloseWebPart(text1)

  End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
      <asp:WebPartManager ID="mgr1" runat="server" />
      <uc1:DisplayModeMenuVB ID="menu1" runat="server" />
      <asp:WebPartZone ID="WebPartZone1" runat="server">
        <ZoneTemplate>
          <aspSample:TextDisplayWebPart ID="text1" 
            runat="server" 
            Title="My Text WebPart" />
        </ZoneTemplate>
      </asp:WebPartZone>
      <asp:CatalogZone ID="CatalogZone1" runat="server">
        <ZoneTemplate>
          <asp:PageCatalogPart ID="PageCatalogPart1" runat="server" />   
        </ZoneTemplate>
      </asp:CatalogZone>
      <asp:Button ID="Button1" runat="server" 
        Text="Close WebPart" 
        OnClick="Button1_Click" />
    </form>
</body>
</html>

在瀏覽器中載入頁面之後,按一下動詞功能表, (控制項標題中的箭頭符號) ,然後按一下 [關閉] 來關閉自訂 WebPart 控制項。 現在,在 [顯示模式] 下拉式清單控制項中選取 [目錄],將頁面變更為目錄模式。 頁面目錄隨即出現,其中包含關閉的控制項。 選取關閉控制項旁的核取方塊,按一下 [ 新增 ] 將它新增至頁面,然後按一下 [ 關閉 ] 以傳回頁面以瀏覽模式。 控制項會還原至頁面。 現在再次關閉它,這次按一下 [ 關閉網頁元件 ] 按鈕。

備註

CloseWebPart方法會 WebPart 移除 或其他伺服器控制項,使其不會在原本包含它的網頁上呈現。 關閉的控制項會新增至 PageCatalogPart 物件,該物件會維護關閉控制項的參考,並讓控制項能夠還原至頁面。 關閉 WebPart 的控制項仍會出現在 屬性所參考的集合中 WebParts

關閉控制項與刪除控制項不同。 關閉的控制項仍可還原至頁面,但已刪除的控制項實例會永久移除,且永遠無法還原。 不論 或 伺服器控制項是 WebPart 靜態的 (是在頁面標記中宣告) 或動態 (以程式設計方式新增至頁面,或是由網頁元件目錄) 的使用者所宣告,都可以在頁面上關閉並重新開啟。

一般而言,使用者可以按一下控制項的動詞功能表,然後選取關閉動詞命令來關閉 WebPart 控制項。 您也可以直接呼叫 方法來關閉控制項, CloseWebPart 並將參考 webPart 傳遞給 它。

在關閉控制項的頁面上 WebPart ,如果開發人員宣告 <asp:catalogzone> 元素,並在其中新增 <asp:pagecatalogpart> 元素,它會提供簡單的使用者介面 (UI) ,讓使用者在執行時間將關閉的控制項還原至頁面。 使用者可以將頁面切換為目錄顯示模式,關閉的控制項會出現在頁面目錄內。 使用者可以選取關閉的控制項,並在所需的任何位置將控制項新增回頁面,然後選取的控制項會還原到頁面,並轉譯為正常。

CloseWebPart呼叫 方法時,它會引發數個事件: WebPartClosingSelectedWebPartChanging 如果有多個控制項) ,則 (,如果 WebPartsDisconnecting) 有連接的控制項,則 (。 一般而言,開發人員可以取消這些事件,但在某些情況下,無法取消這些事件。 如需詳細資訊,請參閱 、 SelectedWebPartChangingWebPartsDisconnecting 事件的檔 WebPartClosing

適用於

另請參閱