Freigeben über


WebPartManager.DisconnectWebPart(WebPart) Methode

Definition

Entfernt ein WebPart-Steuerelement oder Serversteuerelement, das geschlossen oder gelöscht wird, aus allen Verbindungen, an denen es beteiligt ist.

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, dessen Verbindungen getrennt werden müssen.

Beispiele

Das folgende Codebeispiel zeigt, wie Sie die DisconnectWebPart-Methode verwenden. Mithilfe von zwei benutzerdefinierten WebPart Steuerelementen können Sie auf der Webseite eine Verbindung zwischen den Steuerelementen herstellen, indem Sie auf eine Schaltfläche klicken, während Sie mit einer anderen Schaltfläche die Verbindung zwischen den Steuerelementen trennen können. Wenn Sie eines der Steuerelemente schließen, während sich die Seite im Suchmodus befindet und die Steuerelemente verbunden sind, wird das geschlossene Steuerelement durch eine Überschreibung der DisconnectWebPart Methode getrennt, die Verbindung beendet und eine Meldung angezeigt.

Das Codebeispiel umfasst vier Teile:

  • Ein Benutzersteuerelement zum Ändern der Anzeigemodi.

  • Eine Quelldatei mit benutzerdefinierten WebPart Steuerelementen.

  • Eine Webseite zum Hosten der Steuerelemente.

  • Eine Erklärung, wie das Beispiel in einem Browser funktioniert.

Der erste Teil des Codebeispiels ist das Benutzersteuerelement zum Ändern der Anzeigemodi. Sie können den Quellcode für das Benutzersteuerelement im Abschnitt Beispiel 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, wo er zur Laufzeit dynamisch kompiliert wird. In diesem Beispiel wird die dynamische Kompilierung verwendet, sodass die Register Direktive, die auf diese Komponenten auf der Webseite verweist, am oberen Rand der Webseite entsprechend deklariert wird. Eine exemplarische Vorgehensweise, die Kompilierungsoptionen veranschaulicht, finden Sie unter Exemplarische Vorgehensweise: Entwickeln und Verwenden eines benutzerdefinierten Webserversteuerelements.

Beachten Sie im Quellcode das geerbte Steuerelement MyWebPartManager , das die DisconnectWebPart -Methode außer Kraft setzt. Diese Methode überprüft jede Verbindung auf einer Seite, um festzustellen, ob das zu schließende Steuerelement an der Verbindung beteiligt ist, und ruft 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 auf 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 Anweisungen zum Registrieren des Benutzersteuerelements und der dynamisch kompilierten Assembly mit den WebPart Steuerelementen enthältRegister. 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 in einem der Steuerelemente auf das Verbenmenü (der Pfeil nach unten in der Kopfzeile des Steuerelements), und wählen Sie im Verbenmenü schließen aus. Wenn Sie versuchen, das Steuerelement zu schließen, wird die überschriebene Methode aufgerufen, die Verbindung wird 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, an denen es als Consumer oder Anbieter beteiligt ist. Wenn das Steuerelement aus einer Verbindung entfernt wird, ruft diese Methode auch die DisconnectWebParts -Methode auf, um alle 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 in Konflikt stehenden Verbindungen zu schließen, und in diesem Fall kann das WebPartsDisconnecting Ereignis nicht abgebrochen werden, da der Konflikt gelöst werden muss.

Der andere Fall tritt auf, wenn ein WebPart Oder-Serversteuerelement, das derzeit verbunden ist, entweder geschlossen oder gelöscht wird. Da in diesem Fall das Steuerelement von der Seite entfernt wird, muss auch seine Verbindung beendet werden, daher ist es designbedingt nicht möglich, das Ereignis abzubrechen, um den WebPartsDisconnecting Prozess des Beendens einer Verbindung zu unterbrechen. Weitere Informationen finden Sie beim WebPartsDisconnecting-Ereignis.

Gilt für:

Weitere Informationen