WebPartManager.DisconnectWebPart(WebPart) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
移除 WebPart 正在關閉或刪除的伺服器控制,從其參與的任何連線中移除。
protected:
virtual void DisconnectWebPart(System::Web::UI::WebControls::WebParts::WebPart ^ webPart);
protected virtual void DisconnectWebPart(System.Web.UI.WebControls.WebParts.WebPart webPart);
abstract member DisconnectWebPart : System.Web.UI.WebControls.WebParts.WebPart -> unit
override this.DisconnectWebPart : System.Web.UI.WebControls.WebParts.WebPart -> unit
Protected Overridable Sub DisconnectWebPart (webPart As WebPart)
參數
範例
以下程式碼範例示範如何使用此 DisconnectWebPart 方法。 網頁透過兩個自訂 WebPart 控制鍵,點擊按鈕即可建立控制鍵之間的連結,另一個按鈕則可解除控制鍵連接。 如果你在頁面處於瀏覽模式且控制項連接時關閉其中一個控制項,覆寫 DisconnectWebPart 該方法會斷開關閉的控制項,結束連線並顯示訊息。
程式碼範例包含四個部分:
使用者控制功能可切換顯示模式。
一個包含自訂 WebPart 控制的原始碼檔案。
一個網頁來承載控制系統。
說明這個範例在瀏覽器中如何運作。
程式碼範例的第一部分是使用者控制顯示模式的設定。 你可以從類別總覽的 WebPartManager 範例部分取得使用者控制的原始碼。 欲了解更多顯示模式及使用者控制機制的資訊,請參閱 「攻略:在網頁零件頁面更改顯示模式」。
第二部分是包含兩個 WebPart 自訂控制項原始碼的檔案,該控制項將連接,另一個自訂 WebPartManager 控制項。 要執行程式碼範例,你必須編譯這個原始碼。 你可以明確編譯,並將結果組合放到你網站的 Bin 資料夾或全域組合快取中。 或者,你也可以把原始碼放在網站的App_Code資料夾,執行時會動態編譯。 此範例使用動態編譯,因此 Register 網頁頂端會相應宣告參考這些元件的指令。 如需示範編譯選項的攻略,請參見 「攻略:開發與使用自訂網頁伺服器控制」。
在原始碼中,注意繼承的控制 MyWebPartManager 權會覆蓋該 DisconnectWebPart 方法。 此方法檢查頁面中的每個連線,以確認關閉控制項是否參與連線,若有,則呼叫該 DisconnectWebParts 方法終止連線。 這與控制中 WebPartManager 方法的基礎實作相同。 覆寫後的方法會透過寫訊息到頁面來自訂基礎實作。
namespace Samples.AspNet.CS.Controls
{
using System;
using System.Web;
using System.Web.Security;
using System.Security.Permissions;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
[AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand,
Level = AspNetHostingPermissionLevel.Minimal)]
public interface IZipCode
{
string ZipCode { get; set;}
}
[AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand,
Level = AspNetHostingPermissionLevel.Minimal)]
public class ZipCodeWebPart : WebPart, IZipCode
{
string zipCodeText = String.Empty;
TextBox input;
Button send;
public ZipCodeWebPart()
{
}
// Make the implemented property personalizable to save
// the Zip Code between browser sessions.
[Personalizable()]
public virtual string ZipCode
{
get { return zipCodeText; }
set { zipCodeText = value; }
}
// This is the callback method that returns the provider.
[ConnectionProvider("Zip Code", "ZipCodeProvider")]
public IZipCode ProvideIZipCode()
{
return this;
}
protected override void CreateChildControls()
{
Controls.Clear();
input = new TextBox();
this.Controls.Add(input);
send = new Button();
send.Text = "Enter 5-digit Zip Code";
send.Click += new EventHandler(this.submit_Click);
this.Controls.Add(send);
}
private void submit_Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(input.Text))
{
zipCodeText = Page.Server.HtmlEncode(input.Text);
input.Text = String.Empty;
}
}
}
[AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand,
Level = AspNetHostingPermissionLevel.Minimal)]
public class WeatherWebPart : WebPart
{
private IZipCode _provider;
string _zipSearch;
Label DisplayContent;
// This method is identified by the ConnectionConsumer
// attribute, and is the mechanism for connecting with
// the provider.
[ConnectionConsumer("Zip Code", "ZipCodeConsumer")]
public void GetIZipCode(IZipCode Provider)
{
_provider = Provider;
}
protected override void OnPreRender(EventArgs e)
{
EnsureChildControls();
if (this._provider != null)
{
_zipSearch = _provider.ZipCode.Trim();
DisplayContent.Text = "My Zip Code is: " + _zipSearch;
}
}
protected override void CreateChildControls()
{
Controls.Clear();
DisplayContent = new Label();
this.Controls.Add(DisplayContent);
}
}
}
Imports System.Web
Imports System.Web.Security
Imports System.Security.Permissions
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 Interface IZipCode
Property ZipCode() As String
End Interface
<AspNetHostingPermission(SecurityAction.Demand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
<AspNetHostingPermission(SecurityAction.InheritanceDemand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
Public Class ZipCodeWebPart
Inherits WebPart
Implements IZipCode
Private zipCodeText As String = String.Empty
Private input As TextBox
Private send As Button
Public Sub New()
End Sub
' Make the implemented property personalizable to save
' the Zip Code between browser sessions.
<Personalizable()> _
Public Property ZipCode() As String _
Implements IZipCode.ZipCode
Get
Return zipCodeText
End Get
Set(ByVal value As String)
zipCodeText = value
End Set
End Property
' This is the callback method that returns the provider.
<ConnectionProvider("Zip Code", "ZipCodeProvider")> _
Public Function ProvideIZipCode() As IZipCode
Return Me
End Function
Protected Overrides Sub CreateChildControls()
Controls.Clear()
input = New TextBox()
Me.Controls.Add(input)
send = New Button()
send.Text = "Enter 5-digit Zip Code"
AddHandler send.Click, AddressOf Me.submit_Click
Me.Controls.Add(send)
End Sub
Private Sub submit_Click(ByVal sender As Object, _
ByVal e As EventArgs)
If input.Text <> String.Empty Then
zipCodeText = Page.Server.HtmlEncode(input.Text)
input.Text = String.Empty
End If
End Sub
End Class
<AspNetHostingPermission(SecurityAction.Demand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
<AspNetHostingPermission(SecurityAction.InheritanceDemand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
Public Class WeatherWebPart
Inherits WebPart
Private _provider As IZipCode
Private _zipSearch As String
Private DisplayContent As Label
' This method is identified by the ConnectionConsumer
' attribute, and is the mechanism for connecting with
' the provider.
<ConnectionConsumer("Zip Code", "ZipCodeConsumer")> _
Public Sub GetIZipCode(ByVal Provider As IZipCode)
_provider = Provider
End Sub
Protected Overrides Sub OnPreRender(ByVal e As EventArgs)
EnsureChildControls()
If Not (Me._provider Is Nothing) Then
_zipSearch = _provider.ZipCode.Trim()
DisplayContent.Text = "My Zip Code is: " + _zipSearch
End If
End Sub
Protected Overrides Sub CreateChildControls()
Controls.Clear()
DisplayContent = New Label()
Me.Controls.Add(DisplayContent)
End Sub
End Class
End Namespace
程式碼範例的第三部分是網頁。 請注意,在頂部附近,包含 Register 註冊使用者控制項的指令,以及動態編譯的組件與 WebPart 控制項。 這個頁面有兩種主要方法。 此 Button1_Click 方法在控制裝置間建立連接,而 Button2_Click 該方法則斷開控制裝置。
<%@ 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)
{
ProviderConnectionPoint provPoint =
mgr.GetProviderConnectionPoints(zip1)["ZipCodeProvider"];
ConsumerConnectionPoint connPoint =
mgr.GetConsumerConnectionPoints(weather1)["ZipCodeConsumer"];
WebPartConnection conn1 = mgr.ConnectWebParts(zip1, provPoint,
weather1, connPoint);
}
protected void Button2_Click(object sender, EventArgs e)
{
if (mgr.Connections.Count >= 1 && mgr.Connections[0] != null)
mgr.DisconnectWebParts(mgr.Connections[0]);
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:WebPartManager ID="mgr" runat="server">
</asp:WebPartManager>
<uc1:DisplayModeMenuCS ID="menu1" runat="server" />
<asp:WebPartZone ID="WebPartZone1" runat="server">
<ZoneTemplate>
<aspSample:ZipCodeWebPart ID="zip1" runat="server"
Title="Zip Code Provider" />
<aspSample:WeatherWebPart ID="weather1" runat="server"
Title="Zip Code Consumer" />
</ZoneTemplate>
</asp:WebPartZone>
<asp:ConnectionsZone ID="ConnectionsZone1" runat="server">
</asp:ConnectionsZone>
<asp:Button ID="Button1" runat="server"
Text="Connect WebPart Controls"
OnClick="Button1_Click" />
<asp:Button ID="Button2" runat="server"
Text="Disconnect WebPart Controls"
OnClick="Button2_Click" />
</div>
</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)
Dim mgr As WebPartManager = _
WebPartManager.GetCurrentWebPartManager(Page)
Dim provPoint As ProviderConnectionPoint = _
mgr.GetProviderConnectionPoints(zip1)("ZipCodeProvider")
Dim connPoint As ConsumerConnectionPoint = _
mgr.GetConsumerConnectionPoints(weather1)("ZipCodeConsumer")
mgr.ConnectWebParts(zip1, provPoint, weather1, connPoint)
End Sub
Protected Sub Button2_Click(ByVal sender as Object, _
ByVal e as System.EventArgs)
If mgr.Connections.Count >= 1 AndAlso _
mgr.Connections(0) IsNot Nothing Then
mgr.DisconnectWebParts(mgr.Connections(0))
End If
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">
<div>
<asp:WebPartManager ID="mgr" runat="server">
</asp:WebPartManager>
<uc1:DisplayModeMenuVB ID="menu1" runat="server" />
<asp:WebPartZone ID="WebPartZone1" runat="server">
<ZoneTemplate>
<aspSample:ZipCodeWebPart ID="zip1" runat="server"
Title="Zip Code Provider" />
<aspSample:WeatherWebPart ID="weather1" runat="server"
Title="Zip Code Consumer" />
</ZoneTemplate>
</asp:WebPartZone>
<asp:ConnectionsZone ID="ConnectionsZone1" runat="server">
</asp:ConnectionsZone>
<asp:Button ID="Button1" runat="server"
Text="Connect WebPart Controls"
OnClick="Button1_Click" />
<asp:Button ID="Button2" runat="server"
Text="Disconnect WebPart Controls"
OnClick="Button2_Click" />
</div>
</form>
</body>
</html>
載入頁面後,點擊 「連接 」按鈕連接控制項。 然後點選其中一個控制項的動詞選單(控制項標題中的向下箭頭),然後從動詞選單中選擇 關閉 。 當你嘗試關閉控制項時,會呼叫覆寫的方法,連線結束,訊息會寫入頁面。 如果你想重置頁面以恢復關閉控制並嘗試其他選項,請點擊 「重置使用者狀態 」連結以移除個人化資料並恢復頁面的原始狀態。
備註
DisconnectWebPart當頁面上的控制項被關閉或從頁面刪除時,Web Parts 控制集會內部呼叫此方法。 在這種情況下,該方法會被呼叫,以移除任何作為消費者或提供者的連線控制。 若控制項從任何連線中移除,此方法也會呼叫 DisconnectWebParts 該方法以終止涉及的任何連線 webPart 。
當 DisconnectWebPart 方法被呼叫時,事件會被 WebPartsDisconnecting 觸發。 通常此活動可取消,但有兩種情況無法取消。 其中一種情況發生在對頁面的請求過程中,當 ActivateConnections 該方法被呼叫時。 若現有連線間存在衝突, DisconnectWebPart 將執行該方法以關閉其中一個衝突連線, WebPartsDisconnecting 此時事件無法取消,因為衝突必須解決。
另一種情況是當前 WebPart 連接的伺服器控制項被關閉或刪除。 在這種情況下,由於控制項被從頁面中移除,其連線也必須終止,因此設計上無法取消 WebPartsDisconnecting 事件來中斷連線結束的過程。 欲了解更多資訊,請參閱該活動。WebPartsDisconnecting