Esta documentación está archivada y no tiene mantenimiento.

ConnectionsZone (Clase)

Proporciona una interfaz de usuario que permite a los usuarios establecer conexiones entre controles WebPart y otros controles de servidor que residen en zonas WebPartZoneBase.

Espacio de nombres: System.Web.UI.WebControls.WebParts
Ensamblado: System.Web (en system.web.dll)

public class ConnectionsZone : ToolZone
public class ConnectionsZone extends ToolZone
public class ConnectionsZone extends ToolZone
No aplicable.

Mediante el conjunto de controles de elementos Web, es posible habilitar dos controles de servidor para que establezcan una conexión y compartan datos, donde un control actúa como proveedor y el otro actúa como consumidor de los datos. Los dos controles pueden ser WebPart u otro tipo de control de servidor, siempre que estén diseñados para trabajar con conexiones y residan en una zona WebPartZoneBase. Para obtener más información sobre las conexiones de elementos Web, vea la información general sobre las clases WebPartConnection y ConnectionPoint, así como Información general sobre conexiones a elementos Web.

Además de los controles y las condiciones necesarias para establecer una conexión de elementos Web, es preciso conectar realmente los controles. Existen tres modos de establecer una conexión entre controles de servidor: declarando una conexión en una página Web, creando una conexión en el código o agregando un control ConnectionsZone a la página para que los usuarios puedan conectar los controles a petición. El control ConnectionsZone crea una interfaz de usuario que permite a los usuarios conectar o desconectar los controles de servidor de una página que cumplan las condiciones necesarias para establecer una conexión. Éste es un control opcional que no es necesario para establecer la conexión, pero que resulta útil cuando se desea que los usuarios controlen los controles de servidor que están conectados o desconectados.

El control ConnectionsZone es uno de los controles de la zona de herramientas de elementos Web que se heredan de la clase base ToolZone. Al tratarse de una zona de herramientas, el control ConnectionsZone se ha diseñado para que sólo esté visible cuando su página Web se encuentre en un modo de presentación determinado. En este caso, el modo de presentación se denomina modo de conexión (una página se encuentra en este modo cuando el control WebPartManager tiene el valor de su propiedad DisplayMode establecido en ConnectDisplayMode). Una vez que los usuarios cambian una página al modo de conexión, deben hacer clic en el verbo conectar del menú de verbos de uno de los controles de servidor, y entonces la interfaz de usuario de conexión pasará a estar visible.

Al tratarse de un control de zona de elementos Web, el control ConnectionsZone es un tipo de zona WebZone (que se hereda de la clase CompositeControl) que se ha diseñado para albergar otros controles. Por lo general, una zona ConnectionsZone tiene prácticamente los mismos elementos que otras zonas de herramientas de elementos Web: un encabezado, un cuerpo o área de contenido y un pie de página. Para obtener una explicación completa sobre lo que es una zona de elementos Web y las distintas partes que la conforman, vea la información general sobre la clase WebZone.

NotaImportante:

Es importante tener en cuenta que, a diferencia de la mayoría de las demás zonas de elementos Web, una zona ConnectionsZone no contiene un único tipo de control de servidor asociado a ella. Para obtener una lista de las zonas y los controles asociados que contienen, vea el gráfico incluido en la información general sobre la clase WebZone. Sin embargo, la zona ConnectionsZone no contiene controles WebPartConnection. Su finalidad es muy específica y consiste en proporcionar una interfaz de usuario que permita a los usuarios conectar o desconectar los controles de servidor de alguna zona WebPartZoneBase de la página. Los únicos controles incluidos en un control ConnectionsZone son los controles de servidor ASP.NET estándar que genera como parte de su interfaz de usuario para establecer conexiones.

Cuando se representa el control ConnectionsZone, genera una interfaz de usuario basada en los controles de servidor de la página que pueden formar conexiones. El control ConnectionsZone determina qué controles de servidor de la zona WebPartZoneBase de la página son proveedores, cuáles son consumidores, qué puntos de conexión están disponibles y si los controles de servidor se encuentran en la actualidad conectados o desconectados; a continuación, el control genera la interfaz de usuario de acuerdo con todos estos elementos.

Por ejemplo, suponga que hay un control WebPart que puede ser proveedor, un control WebPart que puede ser consumidor, que los dos controles están declarados en una zona WebPartZone de la página y que en la actualidad se encuentran desconectados. Cuando un usuario cambie la página al modo de conexión y haga clic en el verbo conectar de uno de los controles, el control ConnectionsZone generará una interfaz de usuario con un vínculo que, cuando se haga clic en él, mostrará un formulario en el que los usuarios podrán seleccionar distintas opciones para crear una conexión. (Si los controles estuvieran previamente conectados, la vista inicial mostraría a los usuarios un botón para desconectar los controles.) En la interfaz de usuario de conexión para crear nuevas conexiones, se muestra a los usuarios qué control es el proveedor y cuál el consumidor. Debajo de cada control de servidor aparece un control de lista desplegable que muestra los objetos ConnectionPoint disponibles del control. En la lista desplegable correspondiente, los usuarios deben seleccionar un objeto ProviderConnectionPoint para el proveedor (con el fin de determinar qué interfaz y qué datos se van a compartir con los consumidores) y un objeto ConsumerConnectionPoint para cada consumidor (con el fin de determinar qué interfaz y qué datos utilizará el consumidor) que se conectará al proveedor.

NotaNota:

En la implementación predeterminada del conjunto de controles de elementos Web, un proveedor puede conectarse a varios consumidores, pero un consumidor solamente puede tener un proveedor.

Para utilizar el control ConnectionsZone, puede declararlo en el elemento <form> de una página Web (pero no puede estar anidado en otro elemento de zona de elementos Web), utilizando el elemento <asp:connectionszone> o agregándolo a la página mediante programación. Si se declara el elemento en una página, a diferencia de las demás zonas de elementos Web, no es posible declarar otro tipo de controles de servidor entre las etiquetas del elemento <asp:connectionszone>. Dentro de este elemento se pueden declarar elementos que estén relacionados con sus propiedades y detalles de estilo, pero se trata de un elemento independiente y no de un control de plantilla en el que puedan declararse otros controles de servidor.

NotaNota:

Para mejorar la accesibilidad, el control ConnectionsZone se representa en un elemento <fieldset>. El elemento <fieldset> agrupa el conjunto de controles relacionados que se utilizan para establecer conexiones en el control ConnectionsZone, y facilita la exploración mediante tabulación entre controles tanto para los agentes de usuario visuales (por ejemplo, los exploradores Web habituales) como para los agentes de usuario orientados a la voz (por ejemplo, el software de lectura de pantalla).

El control ConnectionsZone tiene una serie de propiedades que utiliza para representar la interfaz de usuario de conexión. Un conjunto de propiedades incluye varios verbos (utilizados únicamente con relación a la conexiones) que realizan acciones en la interfaz de usuario: ConfigureVerb, ConnectVerb y DisconnectVerb. Un conjunto grande de propiedades, utilizadas fundamentalmente en la interfaz de usuario de zona de conexiones, se compone de cadenas de texto que se muestran en distintos lugares (o en determinadas situaciones, como cuando se producen errores) en la interfaz de usuario: ConfigureConnectionTitle, ConnectToConsumerInstructionText, ConnectToConsumerText, ConnectToConsumerTitle, ConnectToProviderInstructionText, ConnectToProviderText, ConnectToProviderTitle, ConsumersInstructionText, ConsumersTitle, ExistingConnectionErrorMessage, GetFromText, GetText, InstructionTitle, NewConnectionErrorMessage, NoExistingConnectionInstructionText, NoExistingConnectionTitle, ProvidersInstructionText, ProvidersTitle, SendText y SendToText. La clase ConnectionsZone también contiene varias propiedades comunes situadas en otras zonas de elementos Web: CancelVerb, CloseVerb, Display, EmptyZoneText, HeaderText, InstructionText y PartChromeType. Por último, la propiedad WebPartToConnect es única en la clase y hace referencia al control que inicia la conexión (es decir, el control en cuyo verbo conectar del menú de verbos hace clic el usuario, que es también el control al que hace referencia la propiedad SelectedWebPart del control WebPartManager).

La clase ConnectionsZone tiene también una serie de métodos que se heredan y se reemplazan desde clases base, y la mayoría proviene de las clases base de la zona de elementos Web. Para obtener información detallada, vea cada uno de los métodos.

Notas para los herederos: La clase ConnectionsZone se puede ampliar si los desarrolladores desean cambiar su comportamiento o la interfaz de usuario predeterminada que proporciona para trabajar con conexiones.

En el ejemplo de código siguiente se muestra cómo se utiliza el control ConnectionsZone en una página de elementos Web. Este ejemplo consta de cuatro partes:

  • Un control de usuario que permite cambiar los modos de presentación en la página Web.

  • Un archivo de código fuente que contiene el código de una interfaz de código postal y dos controles WebPart que actúan como proveedor y consumidor en una conexión.

  • Una página Web que aloja todos los controles, que muestra cómo se declara un elemento <asp:connectionszone> y que establece una serie de propiedades de la zona de conexiones mediante declaración y programación.

  • Una explicación de cómo funciona el ejemplo en un explorador.

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 de una página Web. Para obtener más información sobre los modos de presentación y una descripción del código fuente de este control, vea Tutorial: Cambiar los 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="&nbsp;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 es el archivo de código fuente que contiene la interfaz y los controles personalizados. Observe que el control ZipCodeWebPart implementa la interfaz IZipCode agregando un atributo ConnectionProvider para que el control pueda actuar como proveedor de una conexión. El control WeatherWebPart tiene un método marcado con un atributo ConnectionConsumer, donde utiliza la interfaz IZipCode, para poder actuar como consumidor en una conexión.

Para que el ejemplo de código funcione, es necesario compilar este código fuente. Se puede compilar de manera explícita y colocar el ensamblado resultante en la carpeta Bin del sitio Web o en la caché de ensamblados global. El código fuente también se puede colocar en la carpeta App_Code del sitio Web, donde se compilará dinámicamente en tiempo de ejecución. En este ejemplo se utiliza compilación dinámica. Para consultar un tutorial en el que se muestra cómo se compila, vea Tutorial: Desarrollar y utilizar un control de servidor 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 (input.Text != String.Empty)
      {
        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);
    }

  }
}

La tercera parte del código de ejemplo es la página Web. Cerca de la parte superior están las directivas Register del control de usuario y de los controles personalizados que se utilizan en la conexión. En la página se declara un elemento <asp:connectionszone> para ejemplificar cómo se utiliza el control ConnectionsZone mediante declaración. Dentro del elemento, se establecen una serie de propiedades mediante declaración. Otras propiedades de la zona de conexiones se establecen mediante programación en la sección <script> de la página.

<%@ 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 Page_PreRender(object sender, EventArgs e)
  {
     // Set properties on verbs.
     connectionsZone1.CancelVerb.Description = 
       "Terminates the connection process";
     connectionsZone1.CloseVerb.Description = 
       "Closes the connections UI";
     connectionsZone1.ConfigureVerb.Description =
       "Configure the transformer for the connection";
     connectionsZone1.ConnectVerb.Description =
       "Connect two WebPart controls";
     connectionsZone1.DisconnectVerb.Description =
       "End the connection between two controls";
    
     // Set properties for UI text strings.
     connectionsZone1.ConfigureConnectionTitle = 
       "Configure";
     connectionsZone1.ConnectToConsumerInstructionText = 
       "Choose a consumer connection point";
     connectionsZone1.ConnectToConsumerText = 
       "Select a consumer for the provider to connect with";
     connectionsZone1.ConnectToConsumerTitle = 
       "Send data to this consumer";
     connectionsZone1.ConnectToProviderInstructionText =
       "Choose a provider connection point";
     connectionsZone1.ConnectToProviderText =
       "Select a provider for the consumer to connect with";
     connectionsZone1.ConnectToProviderTitle =
       "Get data from this provider";
     connectionsZone1.ConsumersInstructionText = 
       "WebPart controls that receive data from providers";
     connectionsZone1.ConsumersTitle = "Consumer Controls";
     connectionsZone1.GetFromText = "Receive from";
     connectionsZone1.GetText = "Retrieve";
     connectionsZone1.HeaderText = 
      "Create and Manage Connections";
     connectionsZone1.InstructionText = 
      "Manage connections for the selected WebPart control";
     connectionsZone1.InstructionTitle = 
       "Manage connections for consumers or providers";
     connectionsZone1.NoExistingConnectionInstructionText = 
       "No connections exist. Click the above link to create "
       + "a connection.";
     connectionsZone1.NoExistingConnectionTitle = 
       "No current connections";
     connectionsZone1.ProvidersInstructionText =
       "WebPart controls that send data to consumers";
     connectionsZone1.ProvidersTitle = "Provider controls";
     
  }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Connection Zone Sample</title>
</head>
<body>
  <form id="form1" runat="server">
  <asp:webpartmanager runat="server" id="mgr">
    <staticconnections>
      <asp:webpartconnection id="connection1" 
        consumerconnectionpointid="ZipCodeConsumer"
        consumerid="zipConsumer"
        providerconnectionpointid="ZipCodeProvider" 
        providerid="zipProvider" />
    </staticconnections>
  </asp:webpartmanager>
  <uc1:displaymodemenucs id="menu1" runat="server" />
  <div>
  <asp:webpartzone id="WebPartZone1" runat="server">
    <zonetemplate>
      <aspsample:zipcodewebpart id="zipProvider" runat="server" 
        Title="Zip Code Provider"  />
      <aspsample:weatherwebpart id="zipConsumer" runat="server" 
        Title="Zip Code Consumer" />
    </zonetemplate>
  </asp:webpartzone>
  <asp:connectionszone id="connectionsZone1" runat="server" >
    <cancelverb text="Terminate" />
    <closeverb text="Close Zone" />
    <configureverb text="Configure" />
    <connectverb text="Connect Controls" />
    <disconnectverb text="End Connection" />
  </asp:connectionszone>
  </div>
  </form>
</body>
</html>

Cargue la página Web en un explorador. Utilice el control de lista desplegable Modo de presentación para cambiar la página al modo de presentación de conexión. En el menú de verbos del control ZIP Code Provider (el menú de verbos se representa mediante una flecha hacia abajo en la barra de título), haga clic en el verbo conectar. Aparece un control ConnectionsZone. Observe que aparece un botón Finalizar conexión en la interfaz de usuario de conexión; la conexión ya se ha declarado en el marcado de la página y, por tanto, los controles ya están conectados. Haga clic en Finalizar conexión y, a continuación, utilice de nuevo el control Modo de presentación para devolver la página al modo de exploración. Después, vuelva a cambiar la página al modo de conexión, haga clic en el verbo conectar de uno de los controles; observe que la interfaz de usuario muestra ahora un hipervínculo que permite establecer una conexión entre los controles. Haga clic en este vínculo y utilice la interfaz de usuario de conexión para seleccionar los puntos de conexión y establecer la conexión.

  • AspNetHostingPermission  para trabajar en un entorno alojado en host. Valor de la petición: LinkDemand; valor del permiso: Minimal
  • AspNetHostingPermission  para trabajar en un entorno alojado en host. Valor de la petición: InheritanceDemand; valor del permiso: Minimal

System.Object
   System.Web.UI.Control
     System.Web.UI.WebControls.WebControl
       System.Web.UI.WebControls.CompositeControl
         System.Web.UI.WebControls.WebParts.WebZone
           System.Web.UI.WebControls.WebParts.ToolZone
            System.Web.UI.WebControls.WebParts.ConnectionsZone

Los miembros estáticos públicos (Shared en Visual Basic) de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Windows 98, Windows 2000 Service Pack 4, Windows CE, Windows Millennium, Windows Mobile para Pocket PC, Windows Mobile para Smartphone, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter

Microsoft .NET Framework 3.0 es compatible con Windows Vista, Microsoft Windows XP SP2 y Windows Server 2003 SP1.

.NET Framework

Compatible con: 3.0, 2.0
Mostrar: