WebPartConnection Clase

Definición

Proporciona un objeto que permite que dos controles WebPart establezcan una conexión. Esta clase no puede heredarse.

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
Herencia
WebPartConnection
Atributos

Ejemplos

En el ejemplo de código siguiente se muestra cómo crear una conexión sencilla entre dos WebPart controles. En el ejemplo se muestran tres formas de formar una conexión: mediante declaración, colocando etiquetas para la conexión en el marcado de la página web; mediante programación, creando la conexión en el código; y a través de la interfaz de usuario, colocando un ConnectionsZone control en la página, lo que permite a los usuarios establecer una conexión.

El ejemplo de código tiene cuatro partes:

  • Control de usuario que permite cambiar el modo de presentación de elementos web en una página.

  • Código fuente de una interfaz y dos WebPart controles que actúan como proveedor y consumidor para una conexión.

  • Una página web para hospedar todos los controles y ejecutar el ejemplo de código.

  • Explicación de cómo ejecutar la página de ejemplo.

La primera parte de este ejemplo de código es el control de usuario que permite a los usuarios cambiar los modos de presentación en una página web. Guarde el siguiente código fuente en un archivo .ascx y asígnele el nombre de archivo asignado al Src atributo de la Register directiva para este control de usuario, que está cerca de la parte superior de la página web de hospedaje. Para obtener más información sobre los modos de visualización y una descripción del código fuente de este control, vea Tutorial: Cambiar modos de presentación en una página de elementos web.

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

La segunda parte del ejemplo de código es el código fuente de la interfaz y los controles. El archivo de origen contiene una interfaz simple denominada IZipCode. También hay una WebPart clase denominada ZipCodeWebPart que implementa la interfaz y actúa como control de proveedor. Su ProvideIZipCode método es el método de devolución de llamada que implementa el único miembro de la interfaz. El método simplemente devuelve una instancia de la interfaz . Tenga en cuenta que el método está marcado con un ConnectionProvider atributo en sus metadatos. Este es el mecanismo para identificar el método como método de devolución de llamada para el punto de conexión del proveedor. La otra WebPart clase se denomina WeatherWebParty actúa como consumidor de la conexión. Esta clase tiene un método denominado GetZipCode que obtiene una instancia de la IZipCode interfaz del control de proveedor. Tenga en cuenta que este método se marca como método de punto de conexión del consumidor con un ConnectionConsumer atributo en sus metadatos.

Para que se ejecute el ejemplo de código, debe compilar este código fuente. Puede compilarlo explícitamente y colocar el ensamblado resultante en la carpeta Bin del sitio web o en la caché global de ensamblados. Como alternativa, puede colocar el código fuente en la carpeta App_Code del sitio, donde se compilará dinámicamente en tiempo de ejecución. En este ejemplo de código se usa la compilación dinámica. Para ver un tutorial que muestra cómo compilar, consulte Tutorial: Desarrollo y uso de un control 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

La tercera parte del ejemplo de código es la página web. Cerca de la parte superior se muestran las Register directivas para el control de usuario y los controles personalizados WebPart . Dado que en el ejemplo se supone que la compilación dinámica de los controles, el código fuente de los controles debe estar en una subcarpeta App_Code; la Register etiqueta de la página hace referencia solo a un prefijo de etiqueta arbitrario y al espacio de nombres de los controles. Los controles personalizados WebPart (el proveedor y el consumidor) se declaran dentro del elemento de <asp:webpartzone> la página web, dentro de un <zonetemplate> elemento .

La página proporciona tres maneras de formar una conexión entre los controles personalizados. El primer método es declarativo. En el marcado de la página, se declara un <StaticConnections> elemento y dentro de ese es un <asp:WebPartConnections> elemento, con los distintos detalles de consumidor y proveedor de la conexión especificada como atributos. Esta es una manera de crear una conexión, declarandola directamente en la página web, específicamente dentro del <asp:WebPartManager> elemento . Debido a esta conexión estática, se crea inmediatamente una conexión entre los dos controles personalizados la primera vez que se carga la página.

El elemento de la página proporciona <asp:connectionszone> un segundo método para formar una conexión entre los controles. Si un usuario cambia una página al modo de visualización de conexión en tiempo de ejecución y hace clic en un verbo connect en uno de los controles personalizados, el <asp:connectionszone> elemento representa automáticamente la interfaz de usuario para crear una conexión.

La página también muestra una tercera forma de crear una conexión, que es hacerlo mediante programación. En el Button1_Click método , el código crea un ProviderConnectionPoint objeto para el control de proveedor y recupera sus detalles del punto de conexión llamando al GetProviderConnectionPoints método . Lleva a cabo una tarea similar para el control de consumidor, llamando al GetConsumerConnectionPoints método . Por último, crea el nuevo WebPartConnection objeto llamando al ConnectWebParts método en el WebPartManager control .

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

Después de cargar la página web en un explorador, la primera conexión ya existe porque se declara dentro del <StaticConnections> elemento . Escriba algún texto en el control Proveedor de código postal y se mostrará en el control de consumidor. A continuación, desconecte los dos controles. Con el control de lista desplegable Modo de visualización, cambie la página para conectar el modo de presentación. Haga clic en el menú verbos (representado por una flecha hacia abajo en la barra de título) para cada uno de los WebPart controles y observe que cada uno tiene una opción Conectar . Se trata de un verbo connect, que aparece en el menú verbos solo cuando la página está en modo de conexión. Haga clic en el verbo conectar en uno de los controles y aparecerá la interfaz de usuario de conexión proporcionada por el ConnectionsZone control. Haga clic en el botón Desconectar para finalizar la conexión estática entre los controles. Use el control Modo de presentación para devolver la página para examinar el modo. Intente escribir texto nuevo en el proveedor de nuevo y tenga en cuenta que, dado que los controles están desconectados, el texto no se puede actualizar en el control de consumidor.

A continuación, use el mismo método que anteriormente para volver a cambiar la página al modo de visualización de conexión. Haga clic en un verbo connect en uno de los controles. Haga clic en el vínculo Crear una conexión y use la interfaz de usuario proporcionada por el ConnectionsZone control para crear una conexión entre los controles. Este es el segundo método para crear una conexión. Tenga en cuenta que en cuanto se forma la conexión, la última cadena que especificó en el control de proveedor (que no pudo aparecer porque los controles estaban desconectados) aparece repentinamente en el consumidor, porque se ha vuelto a crear la conexión. Haga clic en el botón Desconectar para finalizar la conexión actual que acaba de crear. Devuelve la página para examinar el modo. Escriba algún texto nuevo en el proveedor para demostrar que el texto no se actualiza y que los controles se desconectan de nuevo.

Devuelve la página para conectar el modo de presentación. En lugar de hacer clic en un verbo connect, haga clic en el botón Conectar controles de elemento web , que ilustra el tercer método para formar una conexión. Este enfoque conecta los controles mediante programación en un paso sencillo sin tener que usar el ConnectionsZone control . Tenga en cuenta que a medida que se crea la conexión, la última cadena que escribió en el proveedor aparece repentinamente en el control de consumidor.

Comentarios

En el conjunto de controles de elementos web, una conexión es un vínculo o asociación entre dos WebPart controles (u otro servidor o usuario) que les permite compartir datos. Esta capacidad para compartir datos permite que los controles conectados se usen de maneras que superen la funcionalidad que ofrecen los controles aislados. Por ejemplo, si un control proporciona datos de código postal y otro control puede leer esos datos y proporcionar información meteorológica local basada en el código postal, la funcionalidad conectada de los dos controles proporciona más valor a los usuarios. Para ampliar este ejemplo, se podrían crear otros controles que también muestren información basada en un código postal, como un control con vínculos a noticias locales, y todos estos controles que pueden trabajar con datos de código postal podrían compartir datos con el único control que proporciona un código postal. Los usuarios finales de aplicaciones de elementos web pueden crear y administrar conexiones entre todos estos controles compatibles directamente desde un explorador web, mediante la interfaz de usuario (UI) de conexiones estándar proporcionadas por el ConnectionsZone control, o mediante una interfaz de usuario personalizada proporcionada por un desarrollador.

Esta información general de la WebPartConnection clase es una instrucción general de los detalles básicos para crear una conexión. Para obtener más información sobre los componentes y requisitos específicos implicados en la creación de conexiones, consulte Información general sobre conexiones de elementos web o vea las clases de referencia y los ejemplos de código mencionados en la siguiente explicación. Hay varios aspectos fundamentales de una conexión de elementos web:

  • Dos WebPart controles. Cada conexión de elementos web consta de dos controles. Es posible que un control participe en más de una conexión simultáneamente, pero cada conexión única consta exactamente de dos controles. Los controles pueden derivar directamente de la WebPart clase base, o pueden ser otros controles de servidor, incluidos los controles de ASP.NET, los controles de servidor personalizados y los controles de usuario. Los controles que no derivan de la WebPart clase , si se colocan en una WebPartZoneBase zona, se encapsulan automáticamente con un GenericWebPart objeto en tiempo de ejecución, lo que les permite heredar de la WebPart clase y funcionar como controles en tiempo de ejecución WebPart .

  • Controles que residen en WebPartZoneBase zonas. Tanto los controles como WebPart cualquier otro tipo de control de servidor deben residir en una WebPartZoneBase zona para poder participar en conexiones de elementos web (y la mayoría de otras características de elementos web).

  • Consumidores y proveedores. En cada conexión de elementos web hay dos controles: un proveedor de datos y un consumidor de datos. El proveedor proporciona datos al consumidor a través de un método de devolución de llamada especificado que devuelve datos en forma de interfaz. (Para obtener un ejemplo de cómo crear y especificar el método de devolución de llamada, vea la sección Ejemplo de este tema). Este método de devolución de llamada se conoce como punto de conexión del proveedor. Los detalles de este punto de conexión (su nombre "descriptivo", un identificador y el tipo de la interfaz devuelta) se incluyen en un ProviderConnectionPoint objeto asociado al control de proveedor. El consumidor recibe los datos a través de un método especificado que puede aceptar una instancia de la interfaz. Este método se conoce como punto de conexión de consumidor y los detalles del punto de conexión (nombre, identificador y tipo de interfaz) se encuentran en un ConsumerConnectionPoint objeto asociado al control de consumidor.

  • Controles compatibles o un transformador válido. Para que una conexión funcione, el consumidor y el proveedor deben ser compatibles (lo que significa que sus métodos de punto de conexión especificados pueden trabajar con el mismo tipo de interfaz), o bien debe haber un WebPartTransformer objeto capaz de traducir el tipo ofrecido por el proveedor en un tipo comprendido por el consumidor.

  • Un objeto WebPartConnection. Para que exista una conexión, debe haber una instancia de la WebPartConnection clase que contenga referencias a los controles de proveedor y consumidor, junto con los detalles de sus puntos de conexión. Si el proveedor y el consumidor son incompatibles y, en su lugar, usan un WebPartTransformer objeto para conectarse, la conexión hace referencia al transformador.

  • Un medio para establecer la conexión. Una vez que los controles de consumidor y proveedor compatibles se han diseñado correctamente con métodos de punto de conexión y colocados en una zona, y un WebPartConnection objeto está disponible, el último paso básico necesario es iniciar la conexión. Una manera de hacerlo es que los usuarios creen la conexión a través de la interfaz de usuario. Si coloca un <asp:connectionszone> elemento en la página y los demás componentes necesarios para una conexión están en su lugar, en tiempo de ejecución, un usuario puede cambiar la página al modo de visualización de conexión, haga clic en un verbo connect en el menú verbos del proveedor o consumidor, y aparecerá una interfaz de usuario de conexión (basada en el ConnectionsZone control). A través de esta interfaz de usuario, el usuario puede iniciar la conexión. Otra manera de iniciar la conexión es hacerlo mediante programación. En cualquier caso, ya sea a través de la interfaz de usuario o mediante programación, el método subyacente que inicia la conexión es el mismo. La aplicación llama al ConnectWebParts método (o al ConnectWebParts método si usa un transformador) en el WebPartManager control, pasandolo al proveedor, al consumidor y a sus respectivos objetos de punto de conexión, y el método devuelve un WebPartConnection objeto .

La WebPartConnection clase define un objeto que encapsula los detalles esenciales de una conexión entre dos WebPart controles. La clase consta casi completamente de propiedades relacionadas con los detalles de una conexión determinada. Varias propiedades se refieren al control de consumidor en una conexión. La Consumer propiedad hace referencia al propio control de consumidor y la ConsumerID propiedad hace referencia al identificador del consumidor. La ConsumerConnectionPoint propiedad del ConsumerConnectionPoint consumidor hace referencia al objeto , que contiene los detalles del punto de conexión del consumidor. La ConsumerConnectionPointID propiedad hace referencia al identificador del ConsumerConnectionPoint objeto . Todas estas propiedades de conexión relacionadas con el consumidor deben tener asignado un valor para crear una conexión.

La WebPartConnection clase también tiene varias propiedades relacionadas con el control de proveedor en una conexión y corresponden a las propiedades de un consumidor. La Provider propiedad hace referencia al propio control de proveedor, mientras que la ProviderID propiedad hace referencia a su identificador. La ProviderConnectionPoint propiedad hace referencia al ProviderConnectionPoint objeto y la ProviderConnectionPointID propiedad hace referencia al identificador del punto de conexión del proveedor.

Varias propiedades se refieren al estado de la conexión. La IsActive propiedad indica si la conexión está activa (actualmente intercambiando datos) o inactiva (aún conectada pero no comparte datos activamente). La IsShared propiedad indica si la conexión es compartida (disponible para todos los usuarios de una página) o una conexión específica del usuario, y la IsStatic propiedad indica si el control es estático (declarado en el marcado de página y, por tanto, permanente) o dinámico (creado mediante programación, lo que significa que se puede eliminar).

Constructores

WebPartConnection()

Inicializa una nueva instancia de la clase WebPartConnection.

Propiedades

Consumer

Obtiene un objeto WebPart que actúa como control consumidor en una conexión.

ConsumerConnectionPoint

Obtiene el objeto que funciona como punto de conexión de un control que actúa como consumidor en una conexión.

ConsumerConnectionPointID

Obtiene o establece el valor de propiedad de una conexión que hace referencia al identificador del objeto que actúa como punto de conexión del consumidor en dicha conexión.

ConsumerID

Obtiene o establece el valor de propiedad de una conexión que hace referencia al identificador del control WebPart que actúa como consumidor en dicha conexión.

ID

Obtiene o establece el identificador de un objeto WebPartConnection.

IsActive

Obtiene un valor que indica si en la actualidad hay un objeto WebPartConnection establecido y disponible para intercambiar datos entre sus controles proveedor y consumidor.

IsShared

Obtiene un valor que indica si un objeto WebPartConnection está visible para todos los usuarios o sólo para el usuario actual.

IsStatic

Obtiene un valor que indica si un objeto WebPartConnection se ha declarado en el marcado de una página Web o se ha creado mediante programación.

Provider

Obtiene un control WebPart que actúa como proveedor en una conexión de elementos Web.

ProviderConnectionPoint

Obtiene el objeto que funciona como punto de conexión de un control WebPart que actúa como proveedor de una conexión.

ProviderConnectionPointID

Obtiene o establece el valor de propiedad de una conexión que hace referencia al identificador del objeto que actúa como punto de conexión del proveedor en dicha conexión.

ProviderID

Obtiene o establece el valor de propiedad de una conexión que hace referencia al identificador del control WebPart que actúa como proveedor en dicha conexión.

Transformer

Obtiene un objeto WebPartTransformer que se utiliza para transformar datos entre dos puntos de conexión que de otra forma serían incompatibles en una conexión de elementos Web.

Transformers

Obtiene una colección de objetos WebPartTransformer que el conjunto de controles de elementos Web utiliza internamente.

Métodos

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
ToString()

Reemplaza el método ToString() heredado y devuelve un nombre de tipo abreviado para el objeto de conexión.

Se aplica a

Consulte también