WebPartManager.DisconnectWebPart メソッド
アセンブリ: System.Web (system.web.dll 内)


DisconnectWebPart メソッドは、コントロールをページ上で終了するかまたはページから削除するときに、Web パーツ コントロール セットによって内部的に呼び出されます。このような場合、このメソッドを呼び出すと、コンシューマ コントロールまたはプロバイダ コントロールとして関与している接続からコントロールが削除されます。接続からコントロールが削除されると、このメソッドは DisconnectWebParts メソッドを呼び出し、webPart が関与していたすべての接続を終了させます。
DisconnectWebPart メソッドが呼び出されると、WebPartsDisconnecting イベントが発生します。通常、このイベントはキャンセルできますが、キャンセルできない場合が 2 つあります。1 つは、ActivateConnections メソッドが呼び出されたときで、ページに対する要求中に発生します。既存の接続の間に競合がある場合、競合している接続の 1 つを閉じるために DisconnectWebPart メソッドが呼び出されます。この場合、競合を解決する必要があるため、WebPartsDisconnecting イベントはキャンセルできません。
もう 1 つの場合は、現在接続している WebPart やサーバー コントロールが閉じられたり、削除されたりすると発生します。この場合、コントロールはページから削除されるため、その接続も同様に終了させる必要があります。したがって、仕様上、WebPartsDisconnecting イベントをキャンセルして接続の終了処理を中断することはできません。詳細については、WebPartsDisconnecting イベントのトピックを参照してください。

DisconnectWebPart メソッドを使用する方法を次のコード例に示します。2 つのカスタム WebPart コントロールを使用して、Web ページで 1 つのボタンをクリックしてコントロール間に接続を作成し、もう 1 つのボタンを使用してコントロールの接続を解除できます。ページがブラウズ モードにありコントロールが接続されているときにコントロールの 1 つを終了すると、DisconnectWebPart メソッドのオーバーライドが、終了したコントロールの接続を解除し、接続を終了して、メッセージを表示します。
コード例の最初の部分は、表示モードを変更するユーザー コントロールです。このユーザー コントロールのソース コードは、WebPartManager クラスの概要の「例」から取得できます。表示モードの詳細およびユーザー コントロールの動作方法の詳細については、「チュートリアル : Web パーツ ページでの表示モードの変更」を参照してください。
2 番目の部分は、接続する 2 つのカスタム WebPart コントロール、および 1 つのカスタム WebPartManager コントロールのソース コードが含まれたファイルです。コード例を実行するためには、このソース コードをコンパイルする必要があります。それを明示的にコンパイルし、コンパイル済みのアセンブリを Web サイトの Bin フォルダまたはグローバル アセンブリ キャッシュに配置できます。サイトの App_Code フォルダにソース コードを配置し、実行時に動的にコンパイルすることもできます。この例では動的コンパイルを使用します。このため、Web ページのこれらのコンポーネントを参照する Register ディレクティブを Web ページの先頭で適切に宣言します。コンパイル オプションを示すチュートリアルについては、「チュートリアル : カスタム サーバー コントロールの開発と使用」を参照してください。
ソース コードには、DisconnectWebPart メソッドをオーバーライドする、継承された MyWebPartManager コントロールがあります。このメソッドはページのそれぞれの接続をチェックして、終了するコントロールがその接続に関係するかどうかを確認し、関係する場合は、DisconnectWebParts メソッドを呼び出して接続を終了します。これは、WebPartManager コントロール内のこのメソッドの基本実装と同じです。次に、メッセージをページに書き込むことにより、オーバーライドされたメソッドで基本実装をカスタマイズします。
Imports System 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 'OnPreRender Protected Overrides Sub CreateChildControls() Controls.Clear() DisplayContent = New Label() Me.Controls.Add(DisplayContent) End Sub End Class End Namespace
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 (input.Text != String.Empty) { 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); } } }
コード例の 3 番目の部分は Web ページです。先頭近くには、ユーザー コントロールを登録する Register ディレクティブ、および WebPart コントロールの動的にコンパイルされたアセンブリがあります。このページには 2 つの主要なメソッドがあります。Button1_Click メソッドはコントロールの間に接続を作成し、Button2_Click メソッドはコントロールの接続を解除します。
<%@ Page Language="vb" %> <%@ Register TagPrefix="uc1" TagName="DisplayModeMenuVB" Src="~/displaymodemenuvb.ascx" %> <%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.VB.Controls" %> <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 > <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>
<%@ Page Language="C#" %> <%@ Register TagPrefix="uc1" TagName="DisplayModeMenuCS" Src="~/displaymodemenucs.ascx" %> <%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.CS.Controls" %> <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 > <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>
ページを読み込んだ後、[接続] をクリックしてコントロールを接続します。次に、いずれかのコントロールの動詞メニュー (コントロールのヘッダーにある下向きの矢印) をクリックし、動詞メニューの [閉じる] を選択します。コントロールを終了しようとすると、オーバーライドされたメソッドが呼び出され、接続が終了して、メッセージがページに書き込まれます。ページをリセットして終了したコントロールを復元し、他のオプションを試す場合は、[Reset User State] リンクをクリックしてパーソナル化データを削除し、ページの元の状態を復元します。

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


Weblioに収録されているすべての辞書からWebPartManager.DisconnectWebPart メソッドを検索する場合は、下記のリンクをクリックしてください。

- WebPartManager.DisconnectWebPart メソッドのページへのリンク