Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

ConnectionPoint (Clase)

Actúa como clase base para definir objetos de punto de conexión que permiten que el control consumidor y el control proveedor de una conexión de elementos Web compartan datos.

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

public abstract class ConnectionPoint

El tipo ConnectionPoint expone los siguientes miembros.

  NombreDescripción
Propiedad públicaAllowsMultipleConnectionsObtiene un valor que indica si un punto de conexión admite varias conexiones simultáneas.
Propiedad públicaControlTypeObtiene el tipo Type del control de servidor al que se asocia un punto de conexión.
Propiedad públicaDisplayNameObtiene una cadena que actúa como nombre descriptivo que representa un punto de conexión en la interfaz de usuario.
Propiedad públicaIDObtiene una cadena que contiene el identificador de un punto de conexión.
Propiedad públicaInterfaceTypeObtiene el tipo de interfaz utilizado por un punto de conexión.
Arriba

  NombreDescripción
Método públicoEquals(Object)Determina si el objeto especificado es igual al objeto actual. (Se hereda de Object).
Método protegidoFinalize Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por la recolección de elementos no utilizados. (Se hereda de Object).
Método públicoGetEnabledDevuelve un valor que indica si un punto de conexión puede participar en conexiones.
Método públicoGetHashCode Sirve como una función hash para un tipo en particular. (Se hereda de Object).
Método públicoGetType Obtiene el Typede la instancia actual. (Se hereda de Object).
Método protegidoMemberwiseClone Crea una copia superficial del Object actual. (Se hereda de Object).
Método públicoToString Retorna una cadena que representa al objeto actual. (Se hereda de Object).
Arriba

  NombreDescripción
Campo públicoMiembro estáticoDefaultIDRepresenta una cadena que se utiliza para identificar el punto de conexión predeterminado dentro de una colección de puntos de conexión asociada a un control de servidor.
Arriba

Cada conexión de elementos Web se compone de dos controles de servidor que comparten los datos: un control es el consumidor y el otro es el proveedor. Para consultar una explicación de los componentes esenciales de una conexión de elementos Web y del propio objeto de conexión, vea la información general sobre la clase WebPartConnection. Todas las conexiones de elementos Web necesitan puntos de conexión. Tanto el control proveedor como el control consumidor deben tener al menos un objeto ConnectionPoint definido (también podrían tener varios puntos de conexión) que contenga los detalles sobre el modo en que un control puede conectarse a otro y sobre el tipo de datos que pueden compartir. En una conexión real, el proveedor tiene su tipo de punto de conexión (derivado de la clase base ConnectionPoint), una instancia de ProviderConnectionPoint, y el consumidor tiene su objeto, una instancia de ConsumerConnectionPoint.

Para crear un punto de conexión del proveedor, los desarrolladores deben agregar un método de devolución de llamada al proveedor que devolverá una instancia de la interfaz implementada al consumidor. Deben marcar el método de devolución de llamada en el código fuente con un atributo de código ConnectionProvider (vea la clase ConnectionProviderAttribute). De igual modo, para crear un punto de conexión del consumidor, los desarrolladores deben agregar un método al consumidor que reciba una instancia de la interfaz, y deben marcar ese método con un atributo ConnectionConsumer (vea la clase ConnectionConsumerAttribute).

Cuando los desarrolladores crean conexiones en una página Web, pueden crearlas como conexiones estáticas o dinámicas. Las conexiones estáticas se declaran en el marcado de una página Web. Cuando se declara una conexión estática, los desarrolladores pueden designar qué puntos de conexión se utilizan para el consumidor y el proveedor asignando valores a los atributos ProviderConnectionPointID y ConsumerConnectionPointID en la etiqueta del elemento <asp:webpartconnection>. Este enfoque resulta especialmente útil si hay varios puntos de conexión definidos en los controles consumidor y proveedor porque permite que la conexión estática identifique qué puntos de conexión van a utilizarse en la conexión.

Las conexiones dinámicas se crean mediante programación a través del código de un desarrollador o pueden crearlas los usuarios a través de la interfaz de usuario proporcionada por el control ConnectionsZone. Para crear una conexión en el código, los desarrolladores deben obtener una instancia de un objeto WebPartConnection; para ello, deben llamar al método ConnectWebParts del control WebPartManager. Antes de poder llamar a este método, los desarrolladores deben tener referencias de los controles de servidor consumidor y proveedor y de sus objetos de punto de conexión respectivos. Para obtener referencias de los puntos de conexión de un control proveedor y un control consumidor, los desarrolladores tienen que llamar primero a los métodos GetProviderConnectionPoints y GetConsumerConnectionPoints del control WebPartManager. Estos métodos devuelven los objetos de punto de conexión adecuados, que, a su vez, se pueden transferir al método para crear una conexión.

Cuando los objetos de punto de conexión del proveedor y el consumidor trabajan con el mismo tipo de interfaz, son compatibles y pueden establecer una conexión directa a los datos compartidos. Si no trabajan con el mismo tipo de interfaz, debe utilizarse un objeto WebPartTransformer para transformar la instancia de la interfaz del proveedor a un tipo con el que el consumidor pueda trabajar.

La clase ConnectionPoint abstracta proporciona los detalles básicos de los puntos de conexión que comparten los controles consumidor y proveedor. Varias propiedades contienen estos detalles. La propiedad AllowsMultipleConnections indica si un punto de conexión puede participar a la vez en varias conexiones. De manera predeterminada, los puntos de conexión del proveedor pueden participar en varias conexiones pero los puntos de conexión del consumidor no pueden hacerlo. La propiedad ControlType indica el tipo de control de servidor asociado a un punto de conexión. Tenga en cuenta que no sólo los controles WebPart pueden establecer conexiones; cualquier control de servidor, ya sea un control ASP.NET, un control personalizado o un control de usuario, puede habilitarse para participar en conexiones si se sitúa en una zona WebPartZoneBase. La propiedad DisplayName proporciona un nombre descriptivo para el punto de conexión que se muestra en la interfaz de usuario y ayuda a los usuarios que están creando conexiones. La propiedad ID actúa como un identificador de cadena del propio objeto de punto de conexión. La propiedad InterfaceType indica qué tipo de instancia de interfaz reconoce el punto de conexión. Que un punto de conexión concreto proporcione o utilice una instancia de dicha interfaz depende de que el objeto sea ProviderConnectionPoint o ConsumerConnectionPoint.

La clase ConnectionPoint tiene un método. El método GetEnabled devuelve un valor booleano que indica si un punto de conexión puede en la actualidad participar en conexiones.

La clase ConnectionPoint también tiene un campo público, DefaultID. Este campo contiene un valor que se utiliza para identificar el punto de conexión predeterminado de una conexión.

NotaNota

Los atributos que especifican los métodos de punto de conexión sólo tienen un parámetro necesario, displayName, de modo que es posible crear el atributo de punto de conexión predeterminado sin especificar un identificador. En casos como éste, el campo DefaultID proporciona un valor base para utilizar.

En el ejemplo de código siguiente se muestra cómo se crea una conexión de elementos Web que incluye los objetos ConnectionPoint necesarios. Dado que la clase ConnectionPoint es una clase base abstracta, las instancias de sus clases secundarias, ProviderConnectionPoint y ConsumerConnectionPoint, son en realidad los objetos que se utilizan para establecer una conexión.

Este ejemplo se compone de cuatro partes:

  • Un control de usuario que permite cambiar el modo de presentación de los elementos Web de una página.

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

  • Página Web para hospedar todos los controles y ejecutar el ejemplo de código.

  • Una explicación sobre cómo se ejecuta la página de ejemplo.

La primera parte del ejemplo es un control de usuario que permite a los usuarios cambiar los modos de presentación de una página Web. Guarde el código fuente siguiente en un archivo .ascx y póngale el nombre de archivo que se ha asignado al atributo Src de la directiva Register de este control de usuario, situado cerca de la parte superior de la página Web en que se hospeda. Para obtener más información sobre los modos de presentación y una descripción del código fuente de este control, vea Walkthrough: Changing Display Modes on a Web Parts Page.


<%@ 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 código fuente de la interfaz y los controles. El archivo de código fuente contiene una interfaz simple denominada IZipCode. Hay también una clase WebPart denominada ZipCodeWebPart que implementa la interfaz y actúa como control proveedor. Su método ProvideIZipCode 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. Observe que el método se marca con un atributo ConnectionProvider en sus metadatos. Este mecanismo sirve para identificar el método de devolución de llamada del punto de conexión del proveedor. La otra clase WebPart se denomina WeatherWebPart y actúa como consumidor en la conexión. Esta clase tiene un método denominado GetZipCode que recibe una instancia de la interfaz IZipCode del control proveedor. Observe que este método se marca como método de punto de conexión del consumidor con un atributo ConnectionConsumer en sus metadatos. Éste es el mecanismo para identificar el método de punto de conexión en el control consumidor.

Para ejecutar el ejemplo de código debe 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é global de ensamblados. 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 de código se utiliza compilación dinámica. Para ver un tutorial en el que muestra cómo realizar una compilación, vea Walkthrough: Developing and Using a Custom Server Control.


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 ejemplo de código es la página Web. Cerca de la parte superior están las directivas Register para registrar los controles que forman la conexión y el control de usuario que permite a los usuarios modificar los modos de presentación de la página. La propia conexión se crea mediante declaración dentro del elemento <staticconnections> de la página. También puede crear la conexión mediante programación; el código correspondiente está incluido en el método Button1_Click. Si la conexión se crea mediante declaración o mediante programación, los puntos de conexión siempre deben especificarse tanto para el proveedor como para el consumidor. El método Button2_Click obtiene acceso a los objetos ConnectionPoint del proveedor y el consumidor, y escribe algunos de sus valores de propiedades en una etiqueta 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 Button1_Click(object sender, EventArgs e)
  {
    ProviderConnectionPoint provPoint =
      mgr.GetProviderConnectionPoints(zip1)["ZipCodeProvider"];
    ConsumerConnectionPoint connPoint =
      mgr.GetConsumerConnectionPoints(weather1)["ZipCodeConsumer"];

    if(mgr.CanConnectWebParts(zip1, provPoint, weather1, connPoint))
      mgr.ConnectWebParts(zip1, provPoint, weather1, connPoint);

  }  
  protected void Button2_Click(object sender, EventArgs e)
  {
    WebPartConnection conn = mgr.Connections[0];

    lblConn.Text = "<h2>Connection Point Details</h2>" + 
       "<h3>Provider Connection Point</h3>" + 
       "  Display name: " + conn.ProviderConnectionPoint.DisplayName + 
       "<br />" + 
       "  ID: " + conn.ProviderConnectionPoint.ID + 
       "<br />" + 
       "  Interface type: " + 
        conn.ProviderConnectionPoint.InterfaceType.ToString() + 
       "<br />" + 
       "  Control type: " + conn.ProviderConnectionPoint.ControlType.ToString() + 
       "<br />" + 
       "  Allows multiple connections: " + 
          conn.ProviderConnectionPoint.AllowsMultipleConnections.ToString() + 
       "<br />" + 
       "  Enabled: " + conn.ProviderConnectionPoint.GetEnabled(zip1).ToString() + 
       "<hr />" + 
       "<h3>Consumer Connection Point</h3>" + 
       "  Display name: " + conn.ConsumerConnectionPoint.DisplayName + 
       "<br />" + 
       "  ID: " + conn.ConsumerConnectionPoint.ID + 
       "<br />" + 
       "  Interface type: " + conn.ConsumerConnectionPoint.InterfaceType.ToString() + 
       "<br />" + 
       "  Control type: " + conn.ConsumerConnectionPoint.ControlType.ToString() + 
       "<br />" + 
       "  Allows multiple connections: " + 
          conn.ConsumerConnectionPoint.AllowsMultipleConnections.ToString() + 
       "<br />" + 
       "  Enabled: " + conn.ConsumerConnectionPoint.GetEnabled(zip1).ToString();
  }

  protected void Page_Load(object sender, EventArgs e)
  {
    lblConn.Text = String.Empty;
  }
</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" >
        <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="Dynamic Connection" 
        OnClick="Button1_Click" />      
      <br />
      <asp:Button ID="Button2" runat="server" 
        Text="Connection Point Details" 
        OnClick="Button2_Click" />
      <br />
      <asp:Label ID="lblConn" runat="server" />
    </div>
    </form>
</body>
</html>


Después de cargar la página en un explorador, haga clic en el botón Detalles del punto de conexión. Aparece información sobre los puntos de conexión del proveedor y el consumidor establecidos en la conexión declarativa. A continuación, utilice el control desplegable Modo de presentación para cambiar la página al modo de conexión. En el menú de verbos de uno de los controles WebPart (representado por una flecha hacia abajo de la barra de título), haga clic en el verbo Conectar. Aparece la interfaz de usuario de conexión, que el control <asp:connectionszone> declarado en la página crea automáticamente. Haga clic en el botón Desconectar para finalizar la conexión existente. Utilice el control Modo de presentación para devolver la página al modo de exploración. A continuación, haga clic en el botón Conexión dinámica para crear una conexión mediante programación. Haga clic de nuevo en el botón Detalles del punto de conexión para indicar los detalles sobre los dos objetos de punto de conexión.

.NET Framework

Compatible con: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Todos los miembros static (Shared en Visual Basic) públicos 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.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft