WebPartManager.CloseWebPart(WebPart) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
以不在网页上呈现,但可以重新打开的方式关闭 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 或服务器控件。
例外
webPart
为 null
。
示例
下面的代码示例演示如何使用 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 对象中,该对象维护对已关闭控件的引用,并使控件能够还原到页面。 属性引用的集合中仍会显示一个已关闭 WebPart 的 WebParts 控件。
关闭控件与删除控件不同。 关闭的控件仍可还原到页面,但已删除的控件实例将永久删除并且永远无法还原。 无论 WebPart 或 服务器控件是静态 (在页面标记中声明的,) 或动态 (以编程方式添加到页面,还是由用户从 Web 部件目录) ,都可以在页面上关闭并重新打开它。
通常,用户可以通过单击控件的谓词菜单并选择关闭谓词来关闭 WebPart 控件。 还可以通过直接调用 CloseWebPart 方法并向其传递对 的引用 webPart
来关闭控件。
在控件已关闭的 WebPart 页面上,如果开发人员声明了一个 <asp:catalogzone>
元素,并在其中添加了一个 <asp:pagecatalogpart>
元素,它将提供一个简单的用户界面 (UI) 供用户在运行时将关闭的控件还原到页面。 用户可以将页面切换到目录显示模式,关闭的控件将显示在页面目录中。 用户可以选择关闭的控件,并将其添加回所需的任何位置的页面,然后所选控件将还原到页面并正常呈现。
CloseWebPart调用 方法时,它会引发多个事件:WebPartClosing、 SelectedWebPartChanging (是否存在多个) 控件,以及 WebPartsDisconnecting (是否存在) 连接的控件。 通常,开发人员可以取消这些事件,但在某些情况下无法取消这些事件。 有关详细信息,请参阅 、 和 WebPartsDisconnecting 事件的文档。WebPartClosingSelectedWebPartChanging