Partilhar via


WebPartManager.CanConnectWebParts Método

Definição

Verifica os controles WebPart que participarão de uma conexão a fim determinar se eles são capazes de ser conectados.

Sobrecargas

CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint)

Verifica os controles WebPart que participarão de uma conexão para determinar se eles são capazes de ser conectados, quando os controles de consumidor e provedor têm interfaces compatíveis e um objeto WebPartTransformer não é necessário.

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

Verifica os controles WebPart que participarão de uma conexão para determinar se eles são capazes de conexão e serem conectados e usa um objeto WebPartTransformer para criar a conexão entre um provedor e um consumidor incompatíveis.

Comentários

O CanConnectWebParts método é usado para determinar se dois WebPart controles podem ser conectados. 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 atendidos antes que dois controles possam formar uma conexão. A lista a seguir resume os critérios principais para fazer uma conexão. Se todos esses critérios (mais algumas condições internas adicionais) forem atendidos, o método retornará true, o que significa que os controles podem ser conectados:

  • Os controles de provedor e consumidor não podem ser nulle devem estar contidos na coleção de controles referenciados pela WebParts propriedade .

  • O provedor e o consumidor não podem ter o mesmo controle. Em outras palavras, um WebPart controle não pode se conectar a si mesmo.

  • Os ConnectionPoint objetos (pontos de conexão) para o provedor e o consumidor não podem ser null.

  • O provedor e o consumidor não podem ser fechados (nenhuma propriedade do IsClosed controle pode ser true).

  • A ControlType propriedade do controle de ponto de conexão deve corresponder ao tipo do controle do consumidor e do provedor.

  • Os pontos de conexão devem ser habilitados (seus GetEnabled métodos devem retornar true).

  • Cada ponto de conexão não deve estar tentando formar mais conexões do que o especificado em sua própria AllowsMultipleConnections propriedade.

  • Se um WebPartTransformer objeto (transformador) for necessário para conectar controles incompatíveis, ele não poderá ser null. No entanto, se os controles já forem compatíveis, o transformador deverá ser null.

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

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

CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint)

Verifica os controles WebPart que participarão de uma conexão para determinar se eles são capazes de ser conectados, quando os controles de consumidor e provedor têm interfaces compatíveis e um objeto WebPartTransformer 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 controle que fornece dados a consumer quando os controles estão conectados.

providerConnectionPoint
ProviderConnectionPoint

Um ConnectionPoint que permite que o provider participe de uma conexão.

consumer
WebPart

O controle que recebe dados de provider quando os controles estão conectados.

consumerConnectionPoint
ConsumerConnectionPoint

Um ConnectionPoint que funciona como um método de retorno de chamada para que consumer possa participar de uma conexão.

Retornos

Um valor booliano que indica se provider e consumer podem ser conectados.

Exemplos

O exemplo de código a seguir demonstra como usar esse método.

O exemplo de código tem quatro partes:

  • Um controle de usuário que permite alterar os modos de exibição em uma página de Web Parts.

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

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

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

A primeira parte do exemplo de código é o controle de usuário para alterar os modos de exibição. Você pode obter o código-fonte para o controle de usuário na seção Exemplo da visão geral da WebPartManager classe. Para obter mais informações sobre modos de exibição e como o controle de usuário funciona, consulte Passo a passo: alterando modos de exibição em uma página de Web Parts.

A marcação declarativa para a página da Web contém Register diretivas para o controle de usuário e os controles personalizados. Há um <asp:webpartmanager> elemento , um <asp:webpartzone> elemento para conter os controles personalizados e um <asp:connectionszone> elemento . Observe que, no Page_Load método , o código verifica se a conexão pode ser feita e, nesse caso, define um provedor, um consumidor e seus respectivos pontos de conexão e adiciona uma nova conexão ao conjunto de conexõ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 controles. Ele contém uma interface e dois controles personalizados WebPart , um atuando como um provedor e o outro como consumidor. Como eles têm pontos de conexão compatíveis (ambos reconhecem a IZipCode interface), um transformador não é necessário para fazer a conexão. Para que o exemplo de código seja executado, você deve compilar esse código-fonte. Você pode compilá-lo explicitamente e colocar o assembly resultante na pasta Bin do site ou no cache de assembly global. Como alternativa, você pode colocar o código-fonte na pasta App_Code do site, na qual ele será compilado dinamicamente em tempo de execução. Para obter um passo a passo que demonstra como compilar, consulte Passo a passo : desenvolvendo e usando um controle 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 da Web em um navegador, clique no controle de lista suspensa Modo de Exibição e selecione Conectar para alternar a página para o modo de conexão. O modo de conexão usa o <asp:connectionszone> elemento para permitir que você crie conexões entre controles. No modo de conexão, clique na seta para baixo na barra de título do controle CEP para ativar seu menu de verbos e clique em Conectar. Depois que a interface do usuário da conexão for exibida, observe que uma conexão já foi criada pelo código contido no Page_Load método .

Comentários

Esse método é usado para se conectar provider e consumer quando ambos os controles têm tipos de ponto de conexão compatíveis, para que um WebPartTransformer objeto não seja necessário. Talvez você queira usar esse método para verificar se dois controles podem ser conectados antes de chamar ConnectWebParts para criar uma conexão programática.

Essa sobrecarga usa a mesma implementação que a sobrecarga do CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint, WebPartTransformer) método, com a única exceção sendo que essa sobrecarga não requer um transformador.

Confira também

Aplica-se a

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

Verifica os controles WebPart que participarão de uma conexão para determinar se eles são capazes de conexão e serem conectados e usa um objeto WebPartTransformer para criar a conexão entre um provedor e um consumidor 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 controle que fornece dados a consumer quando os controles estão conectados.

providerConnectionPoint
ProviderConnectionPoint

Um ConnectionPoint que funciona como um método de retorno de chamada para que provider possa participar de uma conexão.

consumer
WebPart

O controle que recebe dados de provider quando os controles estão conectados.

consumerConnectionPoint
ConsumerConnectionPoint

Um ConnectionPoint que funciona como um método de retorno de chamada para que consumer possa participar de uma conexão.

transformer
WebPartTransformer

Um WebPartTransformer que permite que um provider e um consumer incompatíveis se conectem.

Retornos

Um valor booliano que indica se provider e consumer podem formar uma conexão.

Comentários

Esse método é usado para se conectar provider e consumer quando ambos os controles têm tipos de ponto de conexão incompatíveis, para que um WebPartTransformer objeto seja necessário. Talvez você queira usar esse método para verificar se dois controles podem ser conectados antes de chamar ConnectWebParts para criar uma conexão programática.

Essa sobrecarga usa a mesma implementação que a sobrecarga do CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint) método, com a única exceção sendo que essa sobrecarga requer um transformador.

Aplica-se a