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 控制件。
網頁。
說明範例在瀏覽器中的運作方式。
程式代碼範例的第一個部分是變更顯示模式的使用者控件。 您可以從類別概觀的 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呼叫 方法時,它會引發數個事件:WebPartClosing、 SelectedWebPartChanging 如果有多個控件) ,則 (,如果 WebPartsDisconnecting) 有連接的控件,則 (。 一般而言,開發人員可以取消這些事件,但在某些情況下,無法取消這些事件。 如需詳細資訊,請參閱、 SelectedWebPartChanging和 WebPartsDisconnecting 事件的檔WebPartClosing。