WebPartManager.DisconnectWebPart(WebPart) Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Usuwa WebPart formant lub, który jest zamykany lub usuwany z wszelkich połączeń, w których uczestniczy.
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)
Parametry
Przykłady
W poniższym przykładzie kodu pokazano, jak używać DisconnectWebPart metody . Za pomocą dwóch kontrolek niestandardowych WebPart strona sieci Web umożliwia utworzenie połączenia między kontrolkami przez kliknięcie przycisku, a inny przycisk umożliwia rozłączenie kontrolek. Jeśli zamkniesz jedną z kontrolek, gdy strona jest w trybie przeglądania, a kontrolki są połączone, zastąpienie DisconnectWebPart metody powoduje rozłączenie zamkniętej kontrolki, zakończenie połączenia i wyświetlenie komunikatu.
Przykładowy kod ma cztery części:
Kontrolka użytkownika do zmieniania trybów wyświetlania.
Plik źródłowy zawierający kontrolki niestandardowe WebPart .
Strona sieci Web do hostowania kontrolek.
Wyjaśnienie działania przykładu w przeglądarce.
Pierwszą częścią przykładu kodu jest kontrolka użytkownika do zmieniania trybów wyświetlania. Kod źródłowy kontrolki użytkownika można uzyskać w sekcji Przykład w przeglądzie WebPartManager klasy. Aby uzyskać więcej informacji na temat trybów wyświetlania i sposobu działania kontrolki użytkownika, zobacz Przewodnik: zmienianie trybów wyświetlania na stronie składników Web Part.
Druga część to plik zawierający kod źródłowy dwóch kontrolek niestandardowych WebPart , które zostaną połączone, oraz kontrolka niestandardowa WebPartManager . Aby można było uruchomić przykładowy kod, należy skompilować ten kod źródłowy. Można je skompilować jawnie i umieścić wynikowy zestaw w folderze Bin witryny sieci Web lub globalnej pamięci podręcznej zestawów. Alternatywnie można umieścić kod źródłowy w folderze App_Code witryny, w którym będzie dynamicznie kompilowany w czasie wykonywania. W tym przykładzie użyto kompilacji dynamicznej, więc Register
dyrektywa odwołująca się do tych składników na stronie sieci Web jest zadeklarowana odpowiednio w górnej części strony sieci Web. Aby zapoznać się z przewodnikiem, który demonstruje opcje kompilowania, zobacz Przewodnik: opracowywanie i używanie niestandardowej kontrolki serwera sieci Web.
W kodzie źródłowym zwróć uwagę na dziedziczonej kontrolce MyWebPartManager
, która zastępuje metodę DisconnectWebPart . Ta metoda sprawdza każde połączenie na stronie, aby sprawdzić, czy zamknięta kontrolka uczestniczy w połączeniu, a jeśli tak, wywołuje DisconnectWebParts metodę, aby zakończyć połączenie. Jest to identyczne z podstawową implementacją metody w kontrolce WebPartManager . Następnie metoda przesłonięć dostosowuje implementację podstawową przez zapisanie komunikatu na stronie.
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
Trzecią częścią przykładu kodu jest strona internetowa. Zwróć uwagę, że w górnej części zawiera Register
dyrektywy umożliwiające zarejestrowanie kontrolki użytkownika oraz dynamicznie skompilowany zestaw za pomocą WebPart kontrolek. Strona ma dwie podstawowe metody. Metoda Button1_Click
tworzy połączenie między kontrolkami, podczas gdy Button2_Click
metoda rozłącza kontrolki.
<%@ 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>
Po załadowaniu strony kliknij przycisk Połącz , aby połączyć kontrolki. Następnie kliknij menu czasowników w jednym z kontrolek (strzałka w dół w nagłówku kontrolki) i wybierz pozycję Zamknij z menu czasowników. Podczas próby zamknięcia kontrolki wywoływana jest metoda przesłonięta, połączenie zostanie zakończone, a komunikat zostanie zapisany na stronie. Jeśli chcesz zresetować stronę, aby przywrócić zamkniętą kontrolkę i eksperymentować z innymi opcjami, kliknij link Resetuj stan użytkownika , aby usunąć dane personalizacji i przywrócić oryginalny stan strony.
Uwagi
Metoda DisconnectWebPart jest wywoływana wewnętrznie przez kontrolkę składników Web Part ustawioną, gdy kontrolka zostanie zamknięta na stronie lub usunięta ze strony. W takim scenariuszu wywoływana jest metoda w celu usunięcia kontroli ze wszystkich połączeń, w których jest ona zaangażowana jako odbiorca lub dostawca. Jeśli kontrolka zostanie usunięta z dowolnego połączenia, ta metoda wywołuje również metodę DisconnectWebParts , aby zakończyć wszystkie połączenia, w których webPart
wystąpiły.
Gdy DisconnectWebPart metoda jest wywoływana, zgłasza WebPartsDisconnecting zdarzenie. Zwykle to zdarzenie można anulować, ale w dwóch przypadkach nie można go anulować. Jeden przypadek występuje podczas żądań do strony, gdy metoda jest wywoływana ActivateConnections . Jeśli istnieje konflikt między istniejącymi połączeniami, DisconnectWebPart metoda zostanie wywołana w celu zamknięcia jednego z połączeń powodujących konflikt, a w tym przypadku WebPartsDisconnecting nie można anulować zdarzenia, ponieważ konflikt musi zostać rozwiązany.
Drugi przypadek występuje, gdy kontrolka WebPart serwera lub, która jest aktualnie połączona, jest zamknięta lub usunięta. W takim przypadku ze względu na to, że kontrolka jest usuwana ze strony, jego połączenie musi zostać przerwane, dlatego zgodnie z projektem nie można anulować WebPartsDisconnecting zdarzenia, aby przerwać proces kończenia połączenia. Aby uzyskać więcej informacji, zobacz WebPartsDisconnecting zdarzenie.