WebPartManager.DisconnectWebPart(WebPart) Methode

Definition

Entfernt ein oder ein WebPart Serversteuerelement, das von allen Verbindungen, an denen es teilnimmt, geschlossen oder gelöscht wird.

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)

Parameter

webPart
WebPart

Ein WebPart Steuerelement, das getrennt werden soll.

Beispiele

Im folgenden Codebeispiel wird die Verwendung der DisconnectWebPart Methode veranschaulicht. Mithilfe von zwei benutzerdefinierten WebPart Steuerelementen können Sie auf der Webseite eine Verbindung zwischen den Steuerelementen erstellen, indem Sie auf eine Schaltfläche klicken, während sie durch eine andere Schaltfläche getrennt werden können. Wenn Sie eines der Steuerelemente schließen, während sich die Seite im Suchmodus befindet und die Steuerelemente verbunden sind, trennt eine Außerkraftsetzung der DisconnectWebPart Methode das geschlossene Steuerelement, beendet die Verbindung und zeigt eine Meldung an.

Das Codebeispiel enthält vier Teile:

  • Ein Benutzersteuerelement zum Ändern der Anzeigemodi.

  • Eine Quelldatei mit benutzerdefinierten WebPart Steuerelementen.

  • Eine Webseite zum Hosten der Steuerelemente.

  • Eine Erläuterung der Funktionsweise des Beispiels in einem Browser.

Der erste Teil des Codebeispiels ist das Benutzersteuerelement zum Ändern von Anzeigemodi. Sie können den Quellcode für das Benutzersteuerelement aus dem Beispielabschnitt der WebPartManager Klassenübersicht abrufen. Weitere Informationen zu Anzeigemodi und zur Funktionsweise des Benutzersteuerelements finden Sie unter Exemplarische Vorgehensweise: Ändern von Anzeigemodi auf einer Webpartseite.

Der zweite Teil ist die Datei, die den Quellcode für die beiden benutzerdefinierten WebPart Steuerelemente enthält, die verbunden werden, und ein benutzerdefiniertes WebPartManager Steuerelement. Damit das Codebeispiel ausgeführt werden kann, müssen Sie diesen Quellcode kompilieren. Sie können sie explizit kompilieren und die resultierende Assembly im Ordner "Bin" ihrer Website oder im globalen Assemblycache ablegen. Alternativ können Sie den Quellcode im App_Code Ordner Ihrer Website ablegen, in dem er zur Laufzeit dynamisch kompiliert wird. In diesem Beispiel wird die dynamische Kompilierung verwendet, sodass die Register Direktive, die auf diese Komponenten in der Webseite verweist, oben auf der Webseite deklariert wird. Eine exemplarische Vorgehensweise, die das Kompilieren von Optionen veranschaulicht, finden Sie unter Walkthrough: Developing and Using a Custom Web Server Control.

Beachten Sie im Quellcode das geerbte Steuerelement MyWebPartManager , das die DisconnectWebPart Methode überschreibt. Diese Methode überprüft jede Verbindung auf einer Seite, um festzustellen, ob das zu schließende Steuerelement an der Verbindung teilnimmt, und ruft in diesem Fall die DisconnectWebParts Methode auf, um die Verbindung zu beenden. Dies ist identisch mit der Basisimplementierung der Methode im WebPartManager Steuerelement. Die überschriebene Methode passt dann die Basisimplementierung an, indem eine Nachricht in die Seite geschrieben wird.

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

Der dritte Teil des Codebeispiels ist die Webseite. Beachten Sie, dass es oben Direktiven enthält Register , um das Benutzersteuerelement zu registrieren, und die dynamisch kompilierte Assembly mit den WebPart Steuerelementen. Die Seite verfügt über zwei primäre Methoden. Die Button1_Click Methode erstellt eine Verbindung zwischen den Steuerelementen, während die Button2_Click Methode die Steuerelemente trennt.

<%@ 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>

Nachdem Sie die Seite geladen haben, klicken Sie auf die Schaltfläche " Verbinden ", um die Steuerelemente zu verbinden. Klicken Sie dann auf das Verbenmenü in einem der Steuerelemente (der Abwärtspfeil in der Kopfzeile des Steuerelements), und wählen Sie "Schließen" im Menü "Verben" aus. Wenn Sie versuchen, das Steuerelement zu schließen, wird die überschriebene Methode aufgerufen, die Verbindung beendet, und die Nachricht wird auf die Seite geschrieben. Wenn Sie die Seite zurücksetzen möchten, um das geschlossene Steuerelement wiederherzustellen und mit anderen Optionen zu experimentieren, klicken Sie auf den Link " Benutzerstatus zurücksetzen ", um Personalisierungsdaten zu entfernen und den ursprünglichen Zustand der Seite wiederherzustellen.

Hinweise

Die DisconnectWebPart Methode wird intern vom Webpart-Steuerelementsatz aufgerufen, wenn ein Steuerelement entweder auf einer Seite geschlossen oder von einer Seite gelöscht wird. In einem solchen Szenario wird die Methode aufgerufen, um das Steuerelement aus allen Verbindungen zu entfernen, bei denen es als Verbraucher oder Anbieter beteiligt ist. Wenn das Steuerelement aus einer Verbindung entfernt wird, ruft diese Methode auch die DisconnectWebParts Methode auf, um verbindungen zu beenden, an denen webPart beteiligt war.

Wenn die DisconnectWebPart Methode aufgerufen wird, löst sie das WebPartsDisconnecting Ereignis aus. Normalerweise kann dieses Ereignis abgebrochen werden, aber in zwei Fällen kann es nicht abgebrochen werden. Ein Fall tritt bei Anforderungen an die Seite auf, wenn die ActivateConnections Methode aufgerufen wird. Wenn zwischen vorhandenen Verbindungen ein Konflikt besteht, wird die DisconnectWebPart Methode aufgerufen, um eine der konfliktierenden Verbindungen zu schließen, und in dieser Instanz kann das WebPartsDisconnecting Ereignis nicht abgebrochen werden, da der Konflikt gelöst werden muss.

Der andere Fall tritt auf, wenn ein WebPart aktuell verbundenes Serversteuerelement entweder geschlossen oder gelöscht wird. In diesem Fall muss die Verbindung aufgrund des Entfernens des Steuerelements von der Seite ebenfalls beendet werden. Daher ist es entwurfsbedingt nicht möglich, das WebPartsDisconnecting Ereignis abzubrechen, um den Prozess des Beendens einer Verbindung zu unterbrechen. Weitere Informationen finden Sie im WebPartsDisconnecting Ereignis.

Gilt für:

Weitere Informationen