Partilhar via


WebPartConnection Classe

Definição

Fornece um objeto que permite que dois controles WebPart formem uma conexão. Essa classe não pode ser herdada.

public ref class WebPartConnection sealed
[System.ComponentModel.TypeConverter(typeof(System.ComponentModel.ExpandableObjectConverter))]
public sealed class WebPartConnection
[<System.ComponentModel.TypeConverter(typeof(System.ComponentModel.ExpandableObjectConverter))>]
type WebPartConnection = class
Public NotInheritable Class WebPartConnection
Herança
WebPartConnection
Atributos

Exemplos

O exemplo de código a seguir demonstra como criar uma conexão simples entre dois WebPart controles. O exemplo demonstra três maneiras de formar uma conexão: declarativamente, colocando marcas para a conexão na marcação da página da Web; programaticamente, criando a conexão no código; e por meio da interface do usuário, colocando um ConnectionsZone controle na página, o que permite que os usuários estabeleçam uma conexão.

O exemplo de código tem quatro partes:

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

  • Código-fonte para uma interface e dois WebPart controles que atuam como o provedor e o consumidor de uma conexão.

  • Uma página da Web para hospedar todos os controles e executar o exemplo de código.

  • Uma explicação de como executar a página de exemplo.

A primeira parte desse exemplo de código é o controle de usuário que permite que os usuários alterem os modos de exibição em uma página da Web. Salve o código-fonte a seguir em um arquivo .ascx, dando a ele o nome do arquivo atribuído ao Src atributo da Register diretiva para esse controle de usuário, que fica próximo à parte superior da página da Web de hospedagem. Para obter detalhes sobre modos de exibição e uma descrição do código-fonte nesse controle, consulte Passo a passo: alterando modos de exibição em uma página de Web Parts.

<%@ control language="C#" classname="DisplayModeMenuCS"%>
<script runat="server">
  
 // Use a field to reference the current WebPartManager.
  WebPartManager _manager;

  void Page_Init(object sender, EventArgs e)
  {
    Page.InitComplete += new EventHandler(InitComplete);
  }  

  void InitComplete(object sender, System.EventArgs e)
  {
    _manager = WebPartManager.GetCurrentWebPartManager(Page);

    String browseModeName = WebPartManager.BrowseDisplayMode.Name;

    // Fill the dropdown with the names of supported display modes.
    foreach (WebPartDisplayMode mode in _manager.SupportedDisplayModes)
    {
      String modeName = mode.Name;
      // Make sure a mode is enabled before adding it.
      if (mode.IsEnabled(_manager))
      {
        ListItem item = new ListItem(modeName, modeName);
        DisplayModeDropdown.Items.Add(item);
      }
    }

    // If shared scope is allowed for this user, display the scope-switching
    // UI and select the appropriate radio button for the current user scope.
    if (_manager.Personalization.CanEnterSharedScope)
    {
      Panel2.Visible = true;
      if (_manager.Personalization.Scope == PersonalizationScope.User)
        RadioButton1.Checked = true;
      else
        RadioButton2.Checked = true;
    }
    
  }
 
  // Change the page to the selected display mode.
  void DisplayModeDropdown_SelectedIndexChanged(object sender, EventArgs e)
  {
    String selectedMode = DisplayModeDropdown.SelectedValue;

    WebPartDisplayMode mode = _manager.SupportedDisplayModes[selectedMode];
    if (mode != null)
      _manager.DisplayMode = mode;
  }

  // Set the selected item equal to the current display mode.
  void Page_PreRender(object sender, EventArgs e)
  {
    ListItemCollection items = DisplayModeDropdown.Items;
    int selectedIndex = 
      items.IndexOf(items.FindByText(_manager.DisplayMode.Name));
    DisplayModeDropdown.SelectedIndex = selectedIndex;
  }

  // Reset all of a user's personalization data for the page.
  protected void LinkButton1_Click(object sender, EventArgs e)
  {
    _manager.Personalization.ResetPersonalizationState();
  }

  // If not in User personalization scope, toggle into it.
  protected void RadioButton1_CheckedChanged(object sender, EventArgs e)
  {
    if (_manager.Personalization.Scope == PersonalizationScope.Shared)
      _manager.Personalization.ToggleScope();
  }

  // If not in Shared scope, and if user is allowed, toggle the scope.
  protected void RadioButton2_CheckedChanged(object sender, EventArgs e)
  {
    if (_manager.Personalization.CanEnterSharedScope && 
        _manager.Personalization.Scope == PersonalizationScope.User)
      _manager.Personalization.ToggleScope();
  }
</script>
<div>
  <asp:Panel ID="Panel1" runat="server" 
    Borderwidth="1" 
    Width="230" 
    BackColor="lightgray"
    Font-Names="Verdana, Arial, Sans Serif" >
    <asp:Label ID="Label1" runat="server" 
      Text=" Display Mode" 
      Font-Bold="true"
      Font-Size="8"
      Width="120" 
      AssociatedControlID="DisplayModeDropdown"/>
    <asp:DropDownList ID="DisplayModeDropdown" runat="server"  
      AutoPostBack="true" 
      Width="120"
      OnSelectedIndexChanged="DisplayModeDropdown_SelectedIndexChanged" />
    <asp:LinkButton ID="LinkButton1" runat="server"
      Text="Reset User State" 
      ToolTip="Reset the current user's personalization data for the page."
      Font-Size="8" 
      OnClick="LinkButton1_Click" />
    <asp:Panel ID="Panel2" runat="server" 
      GroupingText="Personalization Scope"
      Font-Bold="true"
      Font-Size="8" 
      Visible="false" >
      <asp:RadioButton ID="RadioButton1" runat="server" 
        Text="User" 
        AutoPostBack="true"
        GroupName="Scope" OnCheckedChanged="RadioButton1_CheckedChanged" />
      <asp:RadioButton ID="RadioButton2" runat="server" 
        Text="Shared" 
        AutoPostBack="true"
        GroupName="Scope" 
        OnCheckedChanged="RadioButton2_CheckedChanged" />
    </asp:Panel>
  </asp:Panel>
</div>
<%@ control language="vb" classname="DisplayModeMenuVB"%>
<script runat="server">
  ' Use a field to reference the current WebPartManager.
  Dim _manager As WebPartManager

  Sub Page_Init(ByVal sender As Object, ByVal e As EventArgs)
    AddHandler Page.InitComplete, AddressOf InitComplete
  End Sub

  Sub InitComplete(ByVal sender As Object, ByVal e As System.EventArgs)
    _manager = WebPartManager.GetCurrentWebPartManager(Page)
      
    Dim browseModeName As String = WebPartManager.BrowseDisplayMode.Name
      
    ' Fill the dropdown with the names of supported display modes.
    Dim mode As WebPartDisplayMode
    For Each mode In _manager.SupportedDisplayModes
      Dim modeName As String = mode.Name
      ' Make sure a mode is enabled before adding it.
      If mode.IsEnabled(_manager) Then
        Dim item As New ListItem(modeName, modeName)
        DisplayModeDropdown.Items.Add(item)
      End If
    Next mode
      
    ' If shared scope is allowed for this user, display the scope-switching
    ' UI and select the appropriate radio button for the current user scope.
    If _manager.Personalization.CanEnterSharedScope Then
      Panel2.Visible = True
      If _manager.Personalization.Scope = PersonalizationScope.User Then
        RadioButton1.Checked = True
      Else
        RadioButton2.Checked = True
      End If
    End If
   
  End Sub

  ' Change the page to the selected display mode.
  Sub DisplayModeDropdown_SelectedIndexChanged(ByVal sender As Object, _
    ByVal e As EventArgs)
    
    Dim selectedMode As String = DisplayModeDropdown.SelectedValue   
    Dim mode As WebPartDisplayMode = _
      _manager.SupportedDisplayModes(selectedMode)
    If Not (mode Is Nothing) Then
      _manager.DisplayMode = mode
    End If

  End Sub
   
  ' Set the selected item equal to the current display mode.
  Sub Page_PreRender(ByVal sender As Object, ByVal e As EventArgs)
    Dim items As ListItemCollection = DisplayModeDropdown.Items
    Dim selectedIndex As Integer = _
      items.IndexOf(items.FindByText(_manager.DisplayMode.Name))
    DisplayModeDropdown.SelectedIndex = selectedIndex

  End Sub

  ' Reset all of a user's personalization data for the page.
  Protected Sub LinkButton1_Click(ByVal sender As Object, _
    ByVal e As EventArgs)
    
    _manager.Personalization.ResetPersonalizationState()
    
  End Sub

  ' If not in User personalization scope, toggle into it.
  Protected Sub RadioButton1_CheckedChanged(ByVal sender As Object, _
    ByVal e As EventArgs)
    
    If _manager.Personalization.Scope = PersonalizationScope.Shared Then
      _manager.Personalization.ToggleScope()
    End If

  End Sub
   
  ' If not in Shared scope, and if user is allowed, toggle the scope.
  Protected Sub RadioButton2_CheckedChanged(ByVal sender As Object, _
    ByVal e As EventArgs)
    
    If _manager.Personalization.CanEnterSharedScope AndAlso _
      _manager.Personalization.Scope = PersonalizationScope.User Then
      _manager.Personalization.ToggleScope()
    End If

  End Sub

</script>
<div>
  <asp:Panel ID="Panel1" runat="server" 
    Borderwidth="1" 
    Width="230" 
    BackColor="lightgray"
    Font-Names="Verdana, Arial, Sans Serif" >
    <asp:Label ID="Label1" runat="server" 
      Text=" Display Mode" 
      Font-Bold="true"
      Font-Size="8"
      Width="120" 
      AssociatedControlID="DisplayModeDropdown"/>
    <asp:DropDownList ID="DisplayModeDropdown" runat="server"  
      AutoPostBack="true" 
      Width="120"
      OnSelectedIndexChanged="DisplayModeDropdown_SelectedIndexChanged" />
    <asp:LinkButton ID="LinkButton1" runat="server"
      Text="Reset User State" 
      ToolTip="Reset the current user's personalization data for the page."
      Font-Size="8" 
      OnClick="LinkButton1_Click" />
    <asp:Panel ID="Panel2" runat="server" 
      GroupingText="Personalization Scope"
      Font-Bold="true"
      Font-Size="8" 
      Visible="false" >
      <asp:RadioButton ID="RadioButton1" runat="server" 
        Text="User" 
        AutoPostBack="true"
        GroupName="Scope" OnCheckedChanged="RadioButton1_CheckedChanged" />
      <asp:RadioButton ID="RadioButton2" runat="server" 
        Text="Shared" 
        AutoPostBack="true"
        GroupName="Scope" 
        OnCheckedChanged="RadioButton2_CheckedChanged" />
    </asp:Panel>
  </asp:Panel>
</div>

A segunda parte do exemplo de código é o código-fonte para a interface e os controles. O arquivo de origem contém uma interface simples chamada IZipCode. Também há uma WebPart classe chamada ZipCodeWebPart que implementa a interface e atua como o controle do provedor. Seu ProvideIZipCode método é o método de retorno de chamada que implementa o único membro da interface. O método simplesmente retorna uma instância da interface . Observe que o método é marcado com um ConnectionProvider atributo em seus metadados. Esse é o mecanismo para identificar o método como o método de retorno de chamada para o ponto de conexão do provedor. A outra WebPart classe é denominada WeatherWebParte atua como consumidor da conexão. Essa classe tem um método chamado GetZipCode que obtém uma instância da IZipCode interface do controle de provedor. Observe que esse método é marcado como o método de ponto de conexão do consumidor com um ConnectionConsumer atributo em seus metadados.

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. Este exemplo de código usa compilação dinâmica. 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 Provider", "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 Consumer", "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 Provider", "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 Consumer", "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

A terceira parte do exemplo de código é a página da Web. Perto da parte superior estão as Register diretivas para o controle de usuário e os controles personalizados WebPart . Como o exemplo pressupõe a compilação dinâmica dos controles, o código-fonte dos controles deve estar em uma subpasta App_Code; a Register marca na página faz referência apenas a um prefixo de marca arbitrário e ao namespace dos controles. Os controles personalizados WebPart (o provedor e o consumidor) são declarados dentro do elemento da página da <asp:webpartzone> Web, dentro de um <zonetemplate> elemento .

A página fornece três maneiras de formar uma conexão entre os controles personalizados. O primeiro método é declarativo. Na marcação da página, um <StaticConnections> elemento é declarado e, dentro disso, é um <asp:WebPartConnections> elemento, com os vários detalhes do consumidor e do provedor da conexão especificados como atributos. Essa é uma maneira de criar uma conexão, declarando-a diretamente na página da Web, especificamente dentro do <asp:WebPartManager> elemento . Devido a essa conexão estática, uma conexão entre os dois controles personalizados é criada imediatamente na primeira vez que a página é carregada.

Um segundo método para formar uma conexão entre os controles é fornecido pelo <asp:connectionszone> elemento na página. Se um usuário alternar uma página para o modo de exibição de conexão em tempo de execução e clicar em um verbo de conexão em um dos controles personalizados, o <asp:connectionszone> elemento renderizará automaticamente a interface do usuário para criar uma conexão.

A página também demonstra uma terceira maneira de criar uma conexão, que é fazer isso programaticamente. Button1_Click No método , o código cria um ProviderConnectionPoint objeto para o controle de provedor e recupera os detalhes do ponto de conexão chamando o GetProviderConnectionPoints método . Ele executa uma tarefa semelhante para o controle do consumidor, chamando o GetConsumerConnectionPoints método . Por fim, ele cria o novo WebPartConnection objeto chamando o ConnectWebParts método no WebPartManager controle .

<%@ 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 mgr_DisplayModeChanged(object sender, 
    WebPartDisplayModeEventArgs e)
  {
    if (mgr.DisplayMode == WebPartManager.ConnectDisplayMode)
      Button1.Visible = true;
    else
      Button1.Visible = false;
  }
</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" 
    OnDisplayModeChanged="mgr_DisplayModeChanged">
        <StaticConnections>
          <asp:WebPartConnection ID="conn1"
            ConsumerConnectionPointID="ZipCodeConsumer"
            ConsumerID="weather1"
            ProviderConnectionPointID="ZipCodeProvider"
            ProviderID="zip1" />
        </StaticConnections>
      </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" 
    Visible="false" />
    </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 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 mgr_DisplayModeChanged (ByVal sender as Object, _
    ByVal e as WebPartDisplayModeEventArgs)

    If mgr.DisplayMode Is WebPartManager.ConnectDisplayMode Then
    Button1.Visible = True
    Else
    Button1.Visible = False
    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" 
    OnDisplayModeChanged="mgr_DisplayModeChanged">
        <StaticConnections>
          <asp:WebPartConnection ID="conn1"
            ConsumerConnectionPointID="ZipCodeConsumer"
            ConsumerID="weather1"
            ProviderConnectionPointID="ZipCodeProvider"
            ProviderID="zip1" />
        </StaticConnections>
      </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" 
    Visible="false" />
    </div>
    </form>
</body>
</html>

Depois de carregar a página da Web em um navegador, a primeira conexão já existe porque ela é declarada dentro do <StaticConnections> elemento . Insira algum texto no controle Provedor de CEP e ele será exibido no controle do consumidor. Em seguida, desconecte os dois controles. Usando o controle de lista suspensa Modo de Exibição , altere a página para conectar o modo de exibição. Clique no menu de verbos (representado por uma seta para baixo na barra de título) para cada um dos controles e observe que cada um tem uma opção WebPartConectar . Este é um verbo connect, que aparece no menu de verbos somente quando a página está no modo de conexão. Clique no verbo de conexão em um dos controles e a interface do usuário de conexão fornecida pelo ConnectionsZone controle será exibida. Clique no botão Desconectar para encerrar a conexão estática entre os controles. Use o controle Modo de Exibição para retornar a página para o modo de navegação. Tente inserir um novo texto no provedor novamente e observe que, como os controles estão desconectados, o texto não é atualizado no controle do consumidor.

Em seguida, use o mesmo método acima para alternar a página para o modo de exibição de conexão novamente. Clique em um verbo de conexão em um dos controles. Clique no link Criar uma Conexão e use a interface do usuário fornecida pelo ConnectionsZone controle para criar uma conexão entre os controles. Esse é o segundo método para criar uma conexão. Observe que assim que a conexão é formada, a última cadeia de caracteres inserida no controle do provedor (que não apareceu porque os controles foram desconectados) aparece repentinamente no consumidor, porque a conexão foi recriada. Clique no botão Desconectar para encerrar a conexão atual que você acabou de criar. Retorne a página para o modo de navegação. Insira um novo texto no provedor para demonstrar que o texto não está atualizado e que os controles estão novamente desconectados.

Retornar a página para conectar o modo de exibição. Em vez de clicar em um verbo de conexão, clique no botão Conectar Controles de WebPart , que ilustra o terceiro método de formação de uma conexão. Essa abordagem conecta os controles programaticamente em uma etapa simples sem precisar usar o ConnectionsZone controle . Observe que, à medida que a conexão é criada, a última cadeia de caracteres inserida no provedor aparece repentinamente no controle do consumidor.

Comentários

No conjunto de controle de Web Parts, uma conexão é um link ou uma associação entre dois WebPart controles (ou outro servidor ou usuário) que permite que eles compartilhem dados. Essa capacidade de compartilhar dados permite que controles conectados sejam usados de maneiras que excedam a funcionalidade oferecida pelos controles isolados. Por exemplo, se um controle fornecer dados de cep e outro controle puder ler esses dados e fornecer informações meteorológicas locais com base no código postal, a funcionalidade conectada dos dois controles fornecerá mais valor aos usuários. Para estender este exemplo, outros controles podem ser criados que também exibem informações com base em um código postal, como um controle com links para notícias locais, e todos esses controles que podem funcionar com dados de cep podem compartilhar dados com o único controle que fornece um código postal. Os usuários finais de aplicativos de Web Parts podem criar e gerenciar conexões entre todos esses controles compatíveis diretamente de um navegador da Web, usando a interface do usuário de conexões padrão fornecida pelo ConnectionsZone controle ou usando uma interface do usuário personalizada fornecida por um desenvolvedor.

Essa WebPartConnection visão geral de classe é uma instrução geral dos detalhes básicos para criar uma conexão. Para obter mais informações sobre componentes e requisitos específicos envolvidos na criação de conexões, consulte Visão geral de conexões de Web Parts ou consulte as classes de referência e exemplos de código mencionados na discussão a seguir. Há vários aspectos fundamentais de uma conexão de Web Parts:

  • Dois controles WebPart. Cada conexão de Web Parts consiste em dois controles. É possível que um controle participe de mais de uma conexão simultaneamente, mas cada conexão consiste em exatamente dois controles. Os controles podem derivar diretamente da WebPart classe base ou podem ser outros controles de servidor, incluindo controles ASP.NET, controles de servidor personalizados e controles de usuário. Os controles que não derivam da WebPart classe , se colocados em uma WebPartZoneBase zona, são encapsulados automaticamente com um GenericWebPart objeto em tempo de execução, o que permite que eles herdem da WebPart classe e funcionem como controles em tempo WebPart de execução.

  • Controles que residem em WebPartZoneBase zonas. Os WebPart controles e qualquer outro tipo de controle de servidor devem residir em uma WebPartZoneBase zona para poder participar de conexões de Web Parts (e da maioria dos outros recursos de Web Parts).

  • Consumidores e provedores. Em cada conexão de Web Parts há dois controles: um provedor de dados e um consumidor de dados. O provedor fornece dados ao consumidor por meio de um método de retorno de chamada especificado que retorna dados na forma de uma interface. (Para obter um exemplo de como criar e especificar o método de retorno de chamada, consulte a seção Exemplo deste tópico.) Esse método de retorno de chamada é conhecido como um ponto de conexão do provedor. Os detalhes desse ponto de conexão (seu nome "amigável", uma ID e o tipo da interface retornada) estão contidos em um ProviderConnectionPoint objeto associado ao controle do provedor. O consumidor recebe os dados por meio de um método especificado que pode aceitar uma instância da interface. Esse método é conhecido como um ponto de conexão do consumidor e os detalhes do ponto de conexão (nome, ID e tipo de interface) estão contidos em um ConsumerConnectionPoint objeto associado ao controle do consumidor.

  • Controles compatíveis ou um transformador válido. Para que uma conexão funcione, o consumidor e o provedor devem ser compatíveis (o que significa que seus métodos de ponto de conexão especificados podem funcionar com o mesmo tipo de interface) ou deve haver um WebPartTransformer objeto capaz de traduzir o tipo oferecido pelo provedor em um tipo compreendido pelo consumidor.

  • Um objeto WebPartConnection. Para que exista uma conexão, deve haver uma instância da WebPartConnection classe que contenha referências aos controles do provedor e do consumidor, juntamente com os detalhes de seus pontos de conexão. Se o provedor e o consumidor forem incompatíveis e usarem um WebPartTransformer objeto para se conectar, a conexão referencia o transformador.

  • Um meio de estabelecer a conexão. Depois que os controles de consumidor e provedor compatíveis tiverem sido projetados corretamente com métodos de ponto de conexão e colocados em uma zona e um WebPartConnection objeto estiver disponível, a última etapa básica necessária é iniciar a conexão. Uma maneira de isso acontecer é que os usuários criem a conexão por meio da interface do usuário. Se você colocar um <asp:connectionszone> elemento na página e os outros componentes necessários para uma conexão estiverem em vigor, em tempo de execução um usuário poderá alternar a página para o modo de exibição de conexão, clicar em um verbo de conexão no menu de verbos do provedor ou do consumidor e uma interface do usuário de conexão (com base no ConnectionsZone controle) será exibida. Por meio dessa interface do usuário, o usuário pode iniciar a conexão. Outra maneira de iniciar a conexão é fazer isso programaticamente. Em ambos os casos, seja por meio da interface do usuário ou programaticamente, o método subjacente que inicia a conexão é o mesmo. O aplicativo chama o ConnectWebParts método (ou o ConnectWebParts método se estiver usando um transformador) no WebPartManager controle, passando para ele o provedor, o consumidor e seus respectivos objetos de ponto de conexão e o método retorna um WebPartConnection objeto .

A WebPartConnection classe define um objeto que encapsula os detalhes essenciais de uma conexão entre dois WebPart controles. A classe consiste quase inteiramente em propriedades relacionadas aos detalhes de uma conexão específica. Várias propriedades dizem respeito ao controle do consumidor em uma conexão. A Consumer propriedade faz referência ao próprio controle do consumidor e a ConsumerID propriedade faz referência à ID do consumidor. O ConsumerConnectionPoint objeto, que contém os detalhes do ponto de conexão do consumidor, é referenciado pela propriedade do ConsumerConnectionPoint consumidor. A ConsumerConnectionPointID propriedade faz referência à ID do ConsumerConnectionPoint objeto . Todas essas propriedades de conexão relacionadas ao consumidor devem ter um valor atribuído a elas para criar uma conexão.

A WebPartConnection classe também tem várias propriedades relacionadas ao controle do provedor em uma conexão e elas correspondem às propriedades de um consumidor. A Provider propriedade faz referência ao próprio controle do provedor, enquanto a propriedade faz referência à ProviderID sua ID. A ProviderConnectionPoint propriedade faz referência ao ProviderConnectionPoint objeto e a ProviderConnectionPointID propriedade faz referência à ID do ponto de conexão do provedor.

Várias propriedades dizem respeito ao estado da conexão. A IsActive propriedade indica se a conexão está ativa (atualmente trocando dados) ou inativa (ainda conectada, mas não compartilhando dados ativamente). A IsShared propriedade indica se a conexão é compartilhada (disponível para todos os usuários de uma página) ou uma conexão específica do usuário, e a IsStatic propriedade indica se o controle é estático (declarado na marcação de página e, portanto, permanente) ou dinâmico (criado programaticamente, o que significa que ele pode ser excluído).

Construtores

WebPartConnection()

Inicializa uma nova instância da classe WebPartConnection.

Propriedades

Consumer

Obtém um objeto WebPart que está atuando como o controle de consumidor em uma conexão.

ConsumerConnectionPoint

Obtém o objeto que serve como um ponto de conexão para um controle que atua como um consumidor em uma conexão.

ConsumerConnectionPointID

Obtém ou define o valor da propriedade em uma conexão que faz referência à ID do objeto que serve como o ponto de conexão do consumidor para essa conexão.

ConsumerID

Obtém ou define o valor da propriedade em uma conexão que faz referência à ID do controle WebPart atuando como consumidor para a conexão.

ID

Obtém ou define a ID de um objeto WebPartConnection.

IsActive

Obtém um valor que indica se um objeto WebPartConnection está estabelecido no momento e é capaz de trocar dados entre os controles do provedor e do consumidor.

IsShared

Obtém um valor que indica se um objeto WebPartConnection está visível a todos os usuários ou somente ao usuário atual.

IsStatic

Obtém um valor que indica se um objeto WebPartConnection é declarado na marcação de uma página da Web ou criado por meio de programação.

Provider

Obtém um controle WebPart que atua como o provedor em uma conexão de Web Parts.

ProviderConnectionPoint

Obtém o objeto que serve como um ponto de conexão para um controle WebPart que atua como um provedor para uma conexão.

ProviderConnectionPointID

Obtém ou define o valor da propriedade em uma conexão que faz referência à ID do objeto que serve como o ponto de conexão do provedor para essa conexão.

ProviderID

Obtém ou define o valor da propriedade em uma conexão que faz referência à ID do controle WebPart atuando como provedor para a conexão.

Transformer

Obtém um objeto WebPartTransformer que é usado para transformar dados entre dois pontos de conexão normalmente incompatíveis em uma conexão de Web Parts.

Transformers

Obtém uma coleção de objetos WebPartTransformer usados internamente pelo conjunto de controle de Web Parts.

Métodos

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
ToString()

Substitui o método ToString() herdado e retorna um nome de tipo curto para o objeto de conexão.

Aplica-se a

Confira também