WebPartManager.CanConnectWebParts Método

Definição

Verifica os WebPart controlos que vão participar numa ligação para determinar se são capazes de ser ligados.

Sobrecargas

Name Description
CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint)

Verifica os WebPart controlos que irão participar numa ligação para determinar se são capazes de ser ligados, quando os controlos do consumidor e do fornecedor têm interfaces compatíveis e um WebPartTransformer objeto não é necessário.

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

Verifica os WebPart controlos que irão participar numa ligação para determinar se são capazes de ser ligados, e usa um WebPartTransformer objeto para criar a ligação entre um consumidor e um fornecedor incompatíveis.

Observações

O CanConnectWebParts método é usado para determinar se dois WebPart controlos podem ser ligados. O método é normalmente usado como uma verificação condicional antes de chamar o ConnectWebParts método.

O CanConnectWebParts método verifica vários critérios que devem ser cumpridos antes de dois controlos poderem formar uma ligação. A lista seguinte resume os principais critérios para estabelecer uma ligação. Se todos estes critérios (mais algumas condições internas adicionais) forem cumpridos, o método devolve true, o que significa que os controlos podem ser ligados:

  • Os controlos do fornecedor e do consumidor não podem ser null, e devem estar incluídos no conjunto de controlos referenciados pela WebParts propriedade.

  • O fornecedor e o consumidor não podem ter o mesmo controlo. Por outras palavras, um WebPart controlo não pode ligar-se a si próprio.

  • Os ConnectionPoint objetos (pontos de ligação) tanto para o fornecedor como para o consumidor não podem ser null.

  • O fornecedor e o consumidor não podem ser fechados (a propriedade de IsClosed nenhum dos controlos pode ser truefechada).

  • A ControlType propriedade do controlo do ponto de ligação deve corresponder ao tipo de controlo tanto do consumidor como do fornecedor.

  • Os pontos de ligação devem estar ambos ativados (os seus GetEnabled métodos devem ambos devolver true).

  • Cada ponto de ligação não deve tentar formar mais ligações do que as especificadas na sua própria AllowsMultipleConnections propriedade.

  • Se um WebPartTransformer objeto (transformador) for necessário para ligar controlos incompatíveis, não pode ser null. No entanto, se os controlos já forem compatíveis, o transformador deve ser null.

  • O transformador (se utilizado) deve ser referenciado na AvailableTransformers coleção.

  • O transformador (se utilizado) deve ter interfaces compatíveis com o fornecedor e o consumidor para que possa transformar dados entre os dois controlos. As interfaces secundárias do consumidor e do fornecedor também devem ser compatíveis.

CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint)

Verifica os WebPart controlos que irão participar numa ligação para determinar se são capazes de ser ligados, quando os controlos do consumidor e do fornecedor têm interfaces compatíveis e um WebPartTransformer objeto não é necessário.

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

Parâmetros

provider
WebPart

O controlo que fornece dados quando consumer os controlos estão ligados.

providerConnectionPoint
ProviderConnectionPoint

Um ConnectionPoint que permite provider participar numa relação.

consumer
WebPart

O controlo que recebe dados quando provider os controlos estão ligados.

consumerConnectionPoint
ConsumerConnectionPoint

A ConnectionPoint que funciona como um método de retorno para que consumer possa participar numa ligação.

Devoluções

Um valor booleano que indica se provider e consumer podem ser ligados.

Exemplos

O exemplo de código seguinte demonstra como usar este método.

O exemplo de código tem quatro partes:

  • Um controlo de utilizador que permite alterar modos de visualização numa página de Web Parts.

  • Uma página Web que contém dois controlos personalizados WebPart que podem ser ligados, um <asp:webpartmanager> elemento e algum código de gestão de eventos que cria uma ligação usando o CanConnectWebParts método.

  • Um ficheiro de código-fonte que contém dois controlos personalizados WebPart e uma interface personalizada.

  • Uma explicação de como o exemplo funciona num navegador.

A primeira parte do exemplo de código é o controlo do utilizador para alterar os modos de visualização. Pode obter o código-fonte do controlo de utilizador a partir da secção Exemplo da WebPartManager visão geral da classe. Para mais informações sobre modos de visualização e como funciona o controlo do utilizador, consulte Walkthrough: Changing Display Modes on a Web Parts Page.

A marcação declarativa para a página Web contém Register diretivas tanto para o controlo do utilizador como para os controlos personalizados. Existe um <asp:webpartmanager> elemento, um <asp:webpartzone> elemento para conter os controlos personalizados e um <asp:connectionszone> elemento. Note que, no Page_Load método, o código verifica se a ligação pode ser feita e, em caso afirmativo, define um fornecedor, um consumidor e os respetivos pontos de ligação, e depois adiciona uma nova ligação ao conjunto de ligações estáticas referenciadas pela StaticConnections propriedade.

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

A terceira parte do exemplo é o código-fonte dos controlos. Contém uma interface e dois controlos personalizados WebPart , um atuando como fornecedor e outro como consumidor. Como têm pontos de ligação compatíveis (ambos reconhecem a IZipCode interface), não é necessário um transformador para fazer a ligação. Para que o exemplo de código seja executado, tens de compilar este código-fonte. Pode compilar explicitamente e colocar o assembly resultante na pasta Bin do seu site ou na cache global assembly. Alternativamente, pode colocar o código-fonte na pasta App_Code do seu site, onde será compilado dinamicamente em tempo de execução. Para um guia que demonstra como compilar, consulte Guia: Desenvolvimento e Utilização de um Controlo de Servidor Web Personalizado.

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

Depois de carregar a página Web num navegador, clique no menu suspenso de controlo da lista Modo de Exibição e selecione Ligar para mudar a página para o modo de ligar. O modo Connect usa o <asp:connectionszone> elemento para permitir criar ligações entre controlos. No modo de ligar, clique na seta para baixo na barra de título do controlo do código postal para ativar o menu de verbos e depois clique em Conectar. Depois de aparecer a interface de utilizador (UI) da ligação, repare que uma ligação já foi criada pelo código contido no Page_Load método.

Observações

Este método é usado para ligar provider e consumer quando ambos os controlos têm tipos de pontos de ligação compatíveis, de modo que um WebPartTransformer objeto não é necessário. Pode querer usar este método para verificar se dois controlos podem ser ligados antes de chamar ConnectWebParts para criar uma ligação programática.

Esta sobrecarga utiliza a mesma implementação da CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint, WebPartTransformer) sobrecarga do método, com a única exceção de que esta sobrecarga não requer transformador.

Ver também

Aplica-se a

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

Verifica os WebPart controlos que irão participar numa ligação para determinar se são capazes de ser ligados, e usa um WebPartTransformer objeto para criar a ligação entre um consumidor e um fornecedor incompatíveis.

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

Parâmetros

provider
WebPart

O controlo que fornece dados quando consumer os controlos estão ligados.

providerConnectionPoint
ProviderConnectionPoint

A ConnectionPoint que funciona como um método de retorno para que provider possa participar numa ligação.

consumer
WebPart

O controlo que recebe dados quando provider os controlos estão ligados.

consumerConnectionPoint
ConsumerConnectionPoint

A ConnectionPoint que funciona como um método de retorno para que consumer possa participar numa ligação.

transformer
WebPartTransformer

A WebPartTransformer que permite um incompatível provider e consumer para conectar.

Devoluções

Um valor booleano que indica se provider e consumer podem formar uma ligação.

Observações

Este método é usado para ligar provider e consumer quando ambos os controlos têm tipos de pontos de ligação incompatíveis, de modo que um WebPartTransformer objeto é necessário. Pode querer usar este método para verificar se dois controlos podem ser ligados antes de chamar ConnectWebParts para criar uma ligação programática.

Esta sobrecarga utiliza a mesma implementação que a CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint) sobrecarga do método, com a única exceção de que esta sobrecarga requer um transformador.

Aplica-se a