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 控件。

  • 网页。

  • 说明示例在浏览器中的工作原理。

代码示例的第一部分是用于更改显示模式的用户控件。 可以从类概述的“示例”部分获取用户控件的 WebPartManager 源代码。 有关显示模式和用户控件工作原理的详细信息,请参阅 演练:更改 Web 部件页上的显示模式

代码示例的第二部分是自定义 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控件。 现在,通过在“显示模式”下拉列表控件中选择“目录”,将页面更改为目录模式。 页面目录随已关闭的 控件一起显示。 选择关闭的控件旁边的检查框,单击“添加”将其添加到页面,然后单击“关闭”将页面返回到浏览模式。 控件将还原到页面。 现在再次关闭它,这次单击“ 关闭 Web 部件” 按钮。

注解

方法 CloseWebPart 删除 WebPart 或其他服务器控件,以便它不会呈现在最初包含它的网页上。 已关闭的控件将添加到 PageCatalogPart 对象中,该对象维护对已关闭控件的引用,并使控件能够还原到页面。 属性引用的集合中仍会显示一个已关闭 WebPartWebParts 控件。

关闭控件与删除控件不同。 已关闭的控件仍可还原到页面,但已删除的控件实例将永久删除且永远无法还原。 无论 WebPart 或 服务器控件是静态 (在页面的标记中声明的,) 或动态 (以编程方式添加到页面,还是由用户从 Web 部件目录) ,都可以在页面上关闭并重新打开它。

通常,用户可以通过单击控件的 WebPart 谓词菜单并选择关闭谓词来关闭控件。 还可以通过直接调用 CloseWebPart 方法并向其传递对 webPart的引用来关闭控件。

在控件已关闭的 WebPart 页面上,如果开发人员声明了一个 <asp:catalogzone> 元素,并在其中添加了一个 <asp:pagecatalogpart> 元素,它将提供一个简单的用户界面 (UI) 供用户在运行时将关闭的控件还原到页面。 用户可以将页面切换到目录显示模式,关闭的控件将显示在页面目录中。 用户可以选择关闭的控件,并在所需的任何位置将其添加回页面,然后将所选控件还原到页面并按正常方式呈现。

CloseWebPart调用 方法时,它会引发多个事件:WebPartClosingSelectedWebPartChanging ((如果有多个控件) )和WebPartsDisconnecting ((如果) 存在连接的控件)。 通常,开发人员可以取消这些事件,但在某些情况下无法取消它们。 有关详细信息,请参阅 、 SelectedWebPartChangingWebPartsDisconnecting 事件的文档WebPartClosing

适用于

另请参阅