Udostępnij za pośrednictwem


WebPartManager.CanConnectWebParts Metoda

Definicja

Sprawdza kontrolki WebPart , które będą uczestniczyć w połączeniu, aby określić, czy mogą być połączone.

Przeciążenia

CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint)

Sprawdza kontrolki WebPart , które będą uczestniczyć w połączeniu, aby określić, czy mogą być połączone, gdy kontrolki konsumenta i dostawcy mają zgodne interfejsy, a WebPartTransformer obiekt nie jest potrzebny.

CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint, WebPartTransformer)

Sprawdza kontrolki WebPart , które będą uczestniczyć w połączeniu, aby określić, czy mogą być połączone, i używa WebPartTransformer obiektu do utworzenia połączenia między niezgodnym konsumentem a dostawcą.

Uwagi

Metoda służy do określania CanConnectWebParts , czy można połączyć dwie WebPart kontrolki. Metoda jest zwykle używana jako kontrola warunkowa przed wywołaniem ConnectWebParts metody.

Metoda CanConnectWebParts sprawdza kilka kryteriów, które muszą zostać spełnione, zanim dwie kontrolki mogą utworzyć połączenie. Poniższa lista zawiera podsumowanie podstawowych kryteriów nawiązywania połączenia. Jeśli zostaną spełnione wszystkie te kryteria (plus kilka dodatkowych warunków wewnętrznych), metoda zwróci wartość true, co oznacza, że można połączyć kontrolki:

  • Kontrolki dostawcy i konsumentów nie mogą być nullelementami i muszą być zawarte w kolekcji kontrolek, do których odwołuje WebParts się właściwość .

  • Dostawca i odbiorca nie mogą być tą samą kontrolą. Innymi słowy, kontrolka WebPart nie może nawiązać połączenia z samym sobą.

  • Obiekty ConnectionPoint (punkty połączenia) zarówno dla dostawcy, jak i konsumenta nie mogą być null.

  • Nie można zamknąć dostawcy i konsumenta (żadna właściwość kontrolki IsClosed nie może być true).

  • Właściwość ControlType kontrolki punktu połączenia musi być zgodna z typem kontrolki zarówno konsumenta, jak i dostawcy.

  • Punkty połączenia muszą być włączone (obie GetEnabled metody muszą zwracać truewartość ).

  • Każdy punkt połączenia nie może próbować tworzyć większej liczby połączeń niż określona we własnej AllowsMultipleConnections właściwości.

  • WebPartTransformer Jeśli obiekt (transformator) jest wymagany do łączenia niezgodnych kontrolek, nie może to być null. Jeśli jednak kontrolki są już zgodne, transformator musi mieć wartość null.

  • Transformator (jeśli jest używany) musi być przywołyny w kolekcji AvailableTransformers .

  • Transformator (jeśli jest używany) musi mieć interfejsy zgodne z dostawcą i odbiorcą, aby mogły przekształcać dane między dwoma kontrolkami. Interfejsy pomocnicze konsumenta i dostawcy muszą być również zgodne.

CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint)

Sprawdza kontrolki WebPart , które będą uczestniczyć w połączeniu, aby określić, czy mogą być połączone, gdy kontrolki konsumenta i dostawcy mają zgodne interfejsy, a WebPartTransformer obiekt nie jest potrzebny.

public:
 bool CanConnectWebParts(System::Web::UI::WebControls::WebParts::WebPart ^ provider, System::Web::UI::WebControls::WebParts::ProviderConnectionPoint ^ providerConnectionPoint, System::Web::UI::WebControls::WebParts::WebPart ^ consumer, System::Web::UI::WebControls::WebParts::ConsumerConnectionPoint ^ consumerConnectionPoint);
public bool CanConnectWebParts (System.Web.UI.WebControls.WebParts.WebPart provider, System.Web.UI.WebControls.WebParts.ProviderConnectionPoint providerConnectionPoint, System.Web.UI.WebControls.WebParts.WebPart consumer, System.Web.UI.WebControls.WebParts.ConsumerConnectionPoint consumerConnectionPoint);
member this.CanConnectWebParts : System.Web.UI.WebControls.WebParts.WebPart * System.Web.UI.WebControls.WebParts.ProviderConnectionPoint * System.Web.UI.WebControls.WebParts.WebPart * System.Web.UI.WebControls.WebParts.ConsumerConnectionPoint -> bool
Public Function CanConnectWebParts (provider As WebPart, providerConnectionPoint As ProviderConnectionPoint, consumer As WebPart, consumerConnectionPoint As ConsumerConnectionPoint) As Boolean

Parametry

provider
WebPart

Kontrolka, która dostarcza dane, consumer gdy kontrolki są połączone.

providerConnectionPoint
ProviderConnectionPoint

Element ConnectionPoint , który umożliwia uczestnictwo provider w połączeniu.

consumer
WebPart

Kontrolka, która odbiera dane z provider momentu połączenia kontrolek.

consumerConnectionPoint
ConsumerConnectionPoint

Element ConnectionPoint , który działa jako metoda wywołania zwrotnego, consumer dzięki czemu może uczestniczyć w połączeniu.

Zwraca

Wartość logiczna wskazująca, czy provider i consumer może być połączona.

Przykłady

W poniższym przykładzie kodu pokazano, jak używać tej metody.

Przykładowy kod ma cztery części:

  • Kontrolka użytkownika, która umożliwia zmianę trybów wyświetlania na stronie składników Web Part.

  • Strona sieci Web zawierająca dwie kontrolki niestandardowe WebPart , które można połączyć, element <asp:webpartmanager> i kod obsługi zdarzeń, który tworzy połączenie przy użyciu CanConnectWebParts metody .

  • Plik kodu źródłowego zawierający dwie kontrolki niestandardowe WebPart i interfejs niestandardowy.

  • Wyjaśnienie sposobu 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ć z 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.

Deklaratywne znaczniki dla strony sieci Web zawierają Register dyrektywy zarówno dla kontrolki użytkownika, jak i kontrolek niestandardowych. <asp:webpartmanager> Istnieje element, element, <asp:webpartzone> który zawiera kontrolki niestandardowe i <asp:connectionszone> element. Zwróć uwagę, że w metodzie Page_Load kod sprawdza, czy można nawiązać połączenie, a jeśli tak, definiuje dostawcę, konsumenta i odpowiednie punkty połączenia, a następnie dodaje nowe połączenie do zestawu połączeń statycznych przywoływały StaticConnections właściwość .

<%@ Page Language="C#" %>
<%@ register TagPrefix="uc1" 
  TagName="DisplayModeMenuCS" 
  Src="DisplayModeMenuCS.ascx" %>
<%@ register tagprefix="aspSample" 
  Namespace="Samples.AspNet.CS.Controls" 
  Assembly="ConnectionSampleCS"%>

<!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 Page_Load(object sender, EventArgs e)
  {
    
    // Define provider, consumer, and connection points.
    WebPart provider = mgr.WebParts["zip1"];
    ProviderConnectionPoint provConnPoint =
      mgr.GetProviderConnectionPoints(provider)["ZipCodeProvider"];
    WebPart consumer = mgr.WebParts["weather1"];
    ConsumerConnectionPoint consConnPoint =
      mgr.GetConsumerConnectionPoints(consumer)["ZipCodeConsumer"];
    
    // Check whether the connection already exists.
    if (mgr.CanConnectWebParts(provider, provConnPoint,
      consumer, consConnPoint))
    {
      // Create a new static connection.
      WebPartConnection conn = new WebPartConnection();
      conn.ID = "staticConn1";
      conn.ConsumerID = "weather1";
      conn.ConsumerConnectionPointID = "ZipCodeConsumer";
      conn.ProviderID = "zip1";
      conn.ProviderConnectionPointID = "ZipCodeProvider";
      mgr.StaticConnections.Add(conn);
    }
 }

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" runat="server">
      <!-- Reference the WebPartManager control. -->
      <asp:WebPartManager ID="mgr" runat="server" />   
    <div>
      <uc1:DisplayModeMenuCS ID="displaymode1" 
        runat="server" />
      <!-- Reference consumer and provider controls 
           in a zone. -->
      <asp:WebPartZone ID="WebPartZone1" runat="server">
        <ZoneTemplate>
          <aspSample:ZipCodeWebPart ID="zip1" 
            runat="server" 
            Title="Zip Code Control"/>
          <aspSample:WeatherWebPart ID="weather1" 
            runat="server" 
            Title="Weather Control" />
        </ZoneTemplate>
      </asp:WebPartZone>
      <hr />
      <!-- Add a ConnectionsZone so users can connect 
           controls. -->
      <asp:ConnectionsZone ID="ConnectionsZone1" 
        runat="server" />
    </div>
    </form>
</body>
</html>
<%@ Page Language="vb" %>
<%@ register TagPrefix="uc1" 
  TagName="DisplayModeMenuVB" 
  Src="DisplayModeMenuVB.ascx" %>
<%@ register tagprefix="aspSample" 
  Namespace="Samples.AspNet.VB.Controls" 
  Assembly="ConnectionSampleVB"%>

<!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 Page_Load(ByVal sender As Object, _
    ByVal e As System.EventArgs)
    
    ' Define provider, consumer, and connection points.
    Dim provider As WebPart = mgr.WebParts("zip1")
    Dim provConnPoint As ProviderConnectionPoint = _
      mgr.GetProviderConnectionPoints(provider)("ZipCodeProvider")
    Dim consumer As WebPart = mgr.WebParts("weather1")
    Dim consConnPoint As ConsumerConnectionPoint = _
      mgr.GetConsumerConnectionPoints(consumer)("ZipCodeConsumer")
    
    ' Check whether the connection already exists.
    If mgr.CanConnectWebParts(provider, provConnPoint, _
      consumer, consConnPoint) Then
      ' Create a new static connection.
      Dim conn As New WebPartConnection()
      conn.ID = "staticConn1"
      conn.ConsumerID = "weather1"
      conn.ConsumerConnectionPointID = "ZipCodeConsumer"
      conn.ProviderID = "zip1"
      conn.ProviderConnectionPointID = "ZipCodeProvider"
      mgr.StaticConnections.Add(conn)
    End If
    
  End Sub
  
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" runat="server">
      <!-- Reference the WebPartManager control. -->
      <asp:WebPartManager ID="mgr" runat="server" />   
    <div>
      <uc1:DisplayModeMenuVB ID="displaymode1" 
        runat="server" />
      <!-- Reference consumer and provider controls 
           in a zone. -->
      <asp:WebPartZone ID="WebPartZone1" runat="server">
        <ZoneTemplate>
          <aspSample:ZipCodeWebPart ID="zip1" 
            runat="server" 
            Title="Zip Code Control"/>
          <aspSample:WeatherWebPart ID="weather1" 
            runat="server" 
            Title="Weather Control" />
        </ZoneTemplate>
      </asp:WebPartZone>
      <hr />
      <!-- Add a ConnectionsZone so users can connect 
           controls. -->
      <asp:ConnectionsZone ID="ConnectionsZone1" 
        runat="server" />
    </div>
    </form>
</body>
</html>

Trzecia część przykładu to kod źródłowy kontrolek. Zawiera interfejs i dwie kontrolki niestandardowe WebPart , jeden działający jako dostawca, a drugi jako odbiorca. Ponieważ mają one zgodne punkty połączenia (oba z nich rozpoznają IZipCode interfejs), transformator nie jest potrzebny do nawiązania połączenia. Aby przykład kodu został uruchomiony, należy skompilować ten kod źródłowy. Można je jawnie skompilować i umieścić wynikowy zestaw w folderze Bin witryny sieci Web lub globalnej pamięci podręcznej zestawów. Możesz też umieścić kod źródłowy w folderze App_Code witryny, w którym będzie dynamicznie kompilowany w czasie wykonywania. Aby zapoznać się z przewodnikiem, który pokazuje, jak skompilować, zobacz Przewodnik: opracowywanie i używanie niestandardowej kontrolki serwera sieci Web.

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

Po załadowaniu strony sieci Web w przeglądarce kliknij kontrolkę listy rozwijanej Tryb wyświetlania i wybierz pozycję Połącz , aby przełączyć stronę w tryb połączenia. Tryb łączenia używa elementu , <asp:connectionszone> aby umożliwić tworzenie połączeń między kontrolkami. W trybie połączenia kliknij strzałkę w dół na pasku tytułu kontrolki Kod pocztowy , aby aktywować menu czasowników, a następnie kliknij przycisk Połącz. Po pojawieniu się interfejsu użytkownika połączenia zwróć uwagę, że połączenie zostało już utworzone przez kod zawarty w metodzie Page_Load .

Uwagi

Ta metoda służy do nawiązywania połączenia provider i consumer gdy obie kontrolki mają zgodne typy punktów połączenia, aby WebPartTransformer obiekt nie był potrzebny. Możesz użyć tej metody, aby sprawdzić, czy można połączyć dwie kontrolki przed wywołaniem w ConnectWebParts celu utworzenia połączenia programowego.

To przeciążenie używa tej samej implementacji co CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint, WebPartTransformer) przeciążenie metody, a jedynym wyjątkiem jest to, że to przeciążenie nie wymaga transformatora.

Zobacz też

Dotyczy

CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint, WebPartTransformer)

Sprawdza kontrolki WebPart , które będą uczestniczyć w połączeniu, aby określić, czy mogą być połączone, i używa WebPartTransformer obiektu do utworzenia połączenia między niezgodnym konsumentem a dostawcą.

public:
 virtual bool CanConnectWebParts(System::Web::UI::WebControls::WebParts::WebPart ^ provider, System::Web::UI::WebControls::WebParts::ProviderConnectionPoint ^ providerConnectionPoint, System::Web::UI::WebControls::WebParts::WebPart ^ consumer, System::Web::UI::WebControls::WebParts::ConsumerConnectionPoint ^ consumerConnectionPoint, System::Web::UI::WebControls::WebParts::WebPartTransformer ^ transformer);
public virtual bool CanConnectWebParts (System.Web.UI.WebControls.WebParts.WebPart provider, System.Web.UI.WebControls.WebParts.ProviderConnectionPoint providerConnectionPoint, System.Web.UI.WebControls.WebParts.WebPart consumer, System.Web.UI.WebControls.WebParts.ConsumerConnectionPoint consumerConnectionPoint, System.Web.UI.WebControls.WebParts.WebPartTransformer transformer);
abstract member CanConnectWebParts : System.Web.UI.WebControls.WebParts.WebPart * System.Web.UI.WebControls.WebParts.ProviderConnectionPoint * System.Web.UI.WebControls.WebParts.WebPart * System.Web.UI.WebControls.WebParts.ConsumerConnectionPoint * System.Web.UI.WebControls.WebParts.WebPartTransformer -> bool
override this.CanConnectWebParts : System.Web.UI.WebControls.WebParts.WebPart * System.Web.UI.WebControls.WebParts.ProviderConnectionPoint * System.Web.UI.WebControls.WebParts.WebPart * System.Web.UI.WebControls.WebParts.ConsumerConnectionPoint * System.Web.UI.WebControls.WebParts.WebPartTransformer -> bool
Public Overridable Function CanConnectWebParts (provider As WebPart, providerConnectionPoint As ProviderConnectionPoint, consumer As WebPart, consumerConnectionPoint As ConsumerConnectionPoint, transformer As WebPartTransformer) As Boolean

Parametry

provider
WebPart

Kontrolka, która dostarcza dane, consumer gdy kontrolki są połączone.

providerConnectionPoint
ProviderConnectionPoint

Element ConnectionPoint , który działa jako metoda wywołania zwrotnego, provider dzięki czemu może uczestniczyć w połączeniu.

consumer
WebPart

Kontrolka, która odbiera dane z provider momentu połączenia kontrolek.

consumerConnectionPoint
ConsumerConnectionPoint

Element ConnectionPoint , który działa jako metoda wywołania zwrotnego, consumer dzięki czemu może uczestniczyć w połączeniu.

transformer
WebPartTransformer

Element WebPartTransformer , który umożliwia nawiązanie połączenia z niezgodnym provider elementem i consumer nawiązaniem połączenia.

Zwraca

Wartość logiczna wskazująca, czy provider i consumer może utworzyć połączenie.

Uwagi

Ta metoda służy do nawiązywania połączenia provider i consumer gdy obie kontrolki mają niezgodne typy punktów połączenia, aby WebPartTransformer obiekt był wymagany. Możesz użyć tej metody, aby sprawdzić, czy można połączyć dwie kontrolki przed wywołaniem w ConnectWebParts celu utworzenia połączenia programowego.

To przeciążenie używa tej samej implementacji co CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint) przeciążenie metody, a jedynym wyjątkiem jest to, że to przeciążenie wymaga transformatora.

Dotyczy