WebPartManager.DisconnectWebPart(WebPart) Methode

Definitie

Hiermee verwijdert u een WebPart of serverbesturingselement dat wordt gesloten of verwijderd uit eventuele verbindingen waaraan het deelneemt.

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)

Parameters

webPart
WebPart

Een WebPart besturingselement dat moet worden losgekoppeld.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe u de DisconnectWebPart methode gebruikt. Met twee aangepaste WebPart besturingselementen kunt u met de webpagina een verbinding tussen de besturingselementen maken door op een knop te klikken, terwijl u met een andere knop de verbinding met de besturingselementen kunt verbreken. Als u een van de besturingselementen sluit terwijl de pagina zich in de bladermodus bevindt en de besturingselementen zijn verbonden, wordt het gesloten besturingselement verbroken door een onderdrukking van de DisconnectWebPart methode, wordt de verbinding beëindigd en wordt een bericht weergegeven.

Het codevoorbeeld heeft vier delen:

  • Een gebruikersbeheer voor het wijzigen van weergavemodi.

  • Een bronbestand met aangepaste WebPart besturingselementen.

  • Een webpagina voor het hosten van de besturingselementen.

  • Een uitleg van hoe het voorbeeld werkt in een browser.

Het eerste deel van het codevoorbeeld is het gebruikersbeheer voor het wijzigen van weergavemodi. U kunt de broncode voor het gebruikersbeheer verkrijgen in de sectie Voorbeeld van het WebPartManager klassenoverzicht. Zie Walkthrough: Weergavemodi wijzigen op een pagina met webonderdelen voor meer informatie over weergavemodi en hoe het gebruikersbeheer werkt.

Het tweede deel is het bestand met de broncode voor de twee aangepaste WebPart besturingselementen die worden verbonden en een aangepast besturingselement WebPartManager . Als u het codevoorbeeld wilt uitvoeren, moet u deze broncode compileren. U kunt deze expliciet compileren en de resulterende assembly in de map Bin van uw website of de globale assemblycache plaatsen. U kunt de broncode ook in de map App_Code van uw site plaatsen, waar deze dynamisch wordt gecompileerd tijdens runtime. In dit voorbeeld wordt dynamische compilatie gebruikt, dus de Register instructie die naar deze onderdelen op de webpagina verwijst, wordt dienovereenkomstig gedeclareerd boven aan de webpagina. Zie Walkthrough: Een aangepast webserverbeheer ontwikkelen en gebruiken voor een overzicht van de opties voor het compileren.

Let in de broncode op het overgenomen besturingselement MyWebPartManager dat de DisconnectWebPart methode overschrijft. Met deze methode wordt elke verbinding op een pagina gecontroleerd om te zien of het besturingselement dat wordt gesloten, deelneemt aan de verbinding en zo ja, roept u de methode aan om de DisconnectWebParts verbinding te beëindigen. Dit is identiek aan de basisuitvoering van de methode in het WebPartManager besturingselement. De overschreven methode past vervolgens de basis-implementatie aan door een bericht naar de pagina te schrijven.

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

Het derde deel van het codevoorbeeld is de webpagina. U ziet dat het bovenaan instructies bevat Register voor het registreren van het gebruikersbesturingselement en de dynamisch gecompileerde assembly met de WebPart besturingselementen. De pagina heeft twee primaire methoden. De Button1_Click methode maakt een verbinding tussen de besturingselementen, terwijl de Button2_Click methode de besturingselementen verbreekt.

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

Nadat u de pagina hebt geladen, klikt u op de knop Verbinding maken om de besturingselementen te verbinden. Klik vervolgens op het menu Werkwoorden in een van de besturingselementen (de pijl-omlaag in de koptekst van het besturingselement) en selecteer Sluiten in het menu Werkwoorden. Wanneer u het besturingselement probeert te sluiten, wordt de overschreven methode aangeroepen, wordt de verbinding beëindigd en wordt het bericht naar de pagina geschreven. Als u de pagina opnieuw wilt instellen om het gesloten besturingselement te herstellen en te experimenteren met andere opties, klikt u op de koppeling Gebruikersstatus opnieuw instellen om persoonlijke gegevens te verwijderen en de oorspronkelijke status van de pagina te herstellen.

Opmerkingen

De DisconnectWebPart methode wordt intern aangeroepen door het besturingselement Webonderdelen dat is ingesteld wanneer een besturingselement op een pagina wordt gesloten of van een pagina wordt verwijderd. In een dergelijk scenario wordt de methode aangeroepen om het besturingselement te verwijderen uit verbindingen waarbij het betrokken is als consument of provider. Als het besturingselement wordt verwijderd uit een verbinding, wordt met deze methode ook de DisconnectWebParts methode aangeroepen om verbindingen te beëindigen waarbij webPart betrokken was.

Wanneer de DisconnectWebPart methode wordt aangeroepen, wordt de WebPartsDisconnecting gebeurtenis gegenereerd. Normaal gesproken kan deze gebeurtenis worden geannuleerd, maar in twee gevallen kan deze niet worden geannuleerd. Eén geval treedt op tijdens aanvragen naar de pagina, wanneer de ActivateConnections methode wordt aangeroepen. Als er een conflict is tussen bestaande verbindingen, wordt de DisconnectWebPart methode aangeroepen om een van de conflicterende verbindingen te sluiten. In dit geval kan de WebPartsDisconnecting gebeurtenis niet worden geannuleerd, omdat het conflict moet worden opgelost.

Het andere geval treedt op wanneer een WebPart of serverbesturing die momenteel is verbonden, wordt gesloten of verwijderd. In dit geval, omdat het besturingselement wordt verwijderd van de pagina, moet de verbinding ook worden beëindigd, daarom is het ontwerp niet mogelijk om de WebPartsDisconnecting gebeurtenis te annuleren om het proces van het beëindigen van een verbinding te onderbreken. Zie de WebPartsDisconnecting gebeurtenis voor meer informatie.

Van toepassing op

Zie ook