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 (是否存在) 连接的控件。 通常,开发人员可以取消这些事件,但在某些情况下无法取消这些事件。 有关详细信息,请参阅 、 和 WebPartsDisconnecting 事件的文档。WebPartClosingSelectedWebPartChanging

适用于

另请参阅