ConnectionPoint Classe

Definizione

Funge da classe base per la definizione di oggetti punto di connessione che consentono la condivisione di dati tra il controllo consumer e il controllo provider in una connessione web part.Serves as the base class for defining connection point objects that enable the consumer control and the provider control in a Web Parts connection to share data.

public ref class ConnectionPoint abstract
public abstract class ConnectionPoint
type ConnectionPoint = class
Public MustInherit Class ConnectionPoint
Ereditarietà
ConnectionPoint
Derivato

Esempio

Nell'esempio di codice riportato di seguito viene illustrata la creazione di una connessione ConnectionPoint Web part che include gli oggetti necessari.The following code example demonstrates the creation of a Web Parts connection that includes the required ConnectionPoint objects. Poiché la ConnectionPoint classe è una classe di base astratta, le istanze delle relative classiProviderConnectionPoint figlio, ConsumerConnectionPointe sono gli oggetti effettivi utilizzati per creare una connessione.Because the ConnectionPoint class is an abstract base class, instances of its child classes--ProviderConnectionPoint and ConsumerConnectionPoint--are the actual objects used to form a connection.

L'esempio è costituito da quattro parti:The example has four parts:

  • Controllo utente che consente di modificare la modalità di visualizzazione Web part in una pagina.A user control that enables you to change the Web Parts display mode on a page.

  • Codice sorgente per un'interfaccia e due WebPart controlli che agiscono come provider e consumer per una connessione.Source code for an interface and two WebPart controls acting as the provider and the consumer for a connection.

  • Una pagina Web per ospitare tutti i controlli ed eseguire l'esempio di codice.A Web page to host all the controls and run the code example.

  • Spiegazione di come eseguire la pagina di esempio.An explanation of how to run the example page.

La prima parte di questo esempio di codice è il controllo utente che consente agli utenti di modificare le modalità di visualizzazione in una pagina Web.The first part of this code example is the user control that enables users to change display modes on a Web page. Salvare il codice sorgente seguente in un file con estensione ascx, assegnando il nome file assegnato all' Src attributo Register della direttiva per questo controllo utente, che si trova nella parte superiore della pagina Web di hosting.Save the following source code to an .ascx file, giving it the file name that is assigned to the Src attribute of the Register directive for this user control, which is near the top of the hosting Web page. Per informazioni dettagliate sulle modalità di visualizzazione e una descrizione del codice sorgente in questo controllo, vedere Procedura dettagliata: Modifica delle modalità di visualizzazione in unapagina Web part.For details about display modes and a description of the source code in this control, see 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>
<%@ 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="&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 seconda parte dell'esempio di codice è il codice sorgente per l'interfaccia e i controlli.The second part of the code example is the source code for the interface and controls. Il file di origine contiene una semplice interfaccia IZipCodedenominata.The source file contains a simple interface named IZipCode. Esiste anche una WebPart classe denominata ZipCodeWebPart che implementa l'interfaccia e funge da controllo del provider.There is also a WebPart class named ZipCodeWebPart that implements the interface and acts as the provider control. Il ProvideIZipCode metodo è il metodo di callback che implementa l'unico membro dell'interfaccia.Its ProvideIZipCode method is the callback method that implements the interface's only member. Il metodo restituisce semplicemente un'istanza dell'interfaccia.The method simply returns an instance of the interface. Si noti che il metodo è contrassegnato con ConnectionProvider un attributo nei relativi metadati.Note that the method is marked with a ConnectionProvider attribute in its metadata. Questo è il meccanismo per identificare il metodo come metodo di callback per il punto di connessione del provider.This is the mechanism for identifying the method as the callback method for the provider's connection point. L'altra WebPart classe è denominata WeatherWebParte funge da consumer per la connessione.The other WebPart class is named WeatherWebPart, and it acts as the consumer for the connection. Questa classe dispone di un metodo GetZipCode denominato che ottiene un'istanza IZipCode dell'interfaccia dal controllo provider.This class has a method named GetZipCode that gets an instance of the IZipCode interface from the provider control. Si noti che questo metodo è contrassegnato come il metodo del punto di connessione del ConnectionConsumer consumer con un attributo nei relativi metadati.Note that this method is marked as the consumer's connection point method with a ConnectionConsumer attribute in its metadata. Questo è il meccanismo per identificare il metodo del punto di connessione nel controllo consumer.This is the mechanism for identifying the connection point method in the consumer control.

Per eseguire l'esempio di codice, è necessario compilare questo codice sorgente.For the code example to run, you must compile this source code. È possibile compilarlo in modo esplicito e inserire l'assembly risultante nella cartella bin del sito Web o nel Global Assembly Cache.You can compile it explicitly and put the resulting assembly in your Web site's Bin folder or the global assembly cache. In alternativa, è possibile inserire il codice sorgente nella cartella App_Code del sito, in cui verrà compilato dinamicamente in fase di esecuzione.Alternatively, you can put the source code in your site's App_Code folder, where it will be dynamically compiled at run time. In questo esempio di codice viene utilizzata la compilazione dinamica.This code example uses dynamic compilation. Per una procedura dettagliata che illustra come eseguire la compilazione , vedere Procedura dettagliata: Sviluppo e utilizzo di un controlloserver Web personalizzato.For a walkthrough that demonstrates how to compile, see Walkthrough: Developing and Using a Custom Web 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 (!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 terza parte dell'esempio di codice è la pagina Web.The third part of the code example is the Web page. Nella parte superiore sono Register presenti direttive per registrare i controlli personalizzati che formano la connessione e il controllo utente che consente agli utenti di modificare le modalità di visualizzazione nella pagina.Near the top are Register directives to register the custom controls that form the connection, and the user control that enables users to change display modes on the page. La connessione stessa viene creata in modo dichiarativo all'interno dell' <staticconnections> elemento nella pagina.The connection itself is created declaratively within the <staticconnections> element on the page. È anche possibile creare la connessione a livello di programmazione; il codice per eseguire questa operazione è contenuto nel Button1_Click metodo.You can also create the connection programmatically; the code for doing that is contained in the Button1_Click method. Se la connessione viene creata in modo dichiarativo o a livello di codice, è necessario specificare sempre i punti di connessione sia per il provider che per il consumer.Whether the connection is created declaratively or programmatically, connection points must always be specified for both the provider and the consumer. Il Button2_Click metodo accede ConnectionPoint agli oggetti sia per il provider che per il consumer e scrive alcuni dei valori delle proprietà in un'etichetta nella pagina.The Button2_Click method accesses the ConnectionPoint objects for both the provider and the consumer, and writes some of their property values to a label in the page.

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

    If mgr.CanConnectWebParts(zip1, provPoint, weather1, connPoint) Then
      mgr.ConnectWebParts(zip1, provPoint, weather1, connPoint)
    End If
    
  End Sub
  
  Protected Sub Button2_Click(ByVal sender As Object, _
    ByVal e As System.EventArgs)
    
    Dim conn As WebPartConnection = 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()
          
  End Sub

  Protected Sub Page_Load(ByVal sender As Object, _
    ByVal e As System.EventArgs)
    lblConn.Text = String.Empty
  End Sub
  
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" 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: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="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>

Una volta caricata la pagina in un browser, fare clic sul pulsante Dettagli punto di connessione .After you load the page in a browser, click the Connection Point Details button. Vengono visualizzate le informazioni sui punti di connessione del provider e del consumer stabiliti nella connessione dichiarativa.Information about the provider and consumer connection points established in the declarative connection appears. Usare quindi il controllo a discesa modalità di visualizzazione per passare alla modalità di connessione della pagina.Next, use the Display Mode drop-down control to switch the page into connect mode. Nel menu dei verbi di uno dei WebPart controlli (rappresentata da una freccia verso il basso nella barra del titolo) fare clic sul verbo Connect.On the verbs menu of one of the WebPart controls (represented by a downward arrow in the title bar), click the connect verb. Viene visualizzata l'interfaccia utente di connessione creata automaticamente <asp:connectionszone> dal controllo dichiarato nella pagina.The connection UI appears, created automatically by the <asp:connectionszone> control declared in the page. Fare clic sul pulsante Disconnetti per terminare la connessione esistente.Click the Disconnect button to terminate the existing connection. Utilizzare il controllo modalità di visualizzazione per ripristinare la modalità di visualizzazione della pagina.Use the Display Mode control to return the page to browse mode. Fare quindi clic sul pulsante Dynamic Connection (connessione dinamica ) per creare una connessione a livello di codice.Next, click the Dynamic Connection button to create a connection programmatically. Fare nuovamente clic sul pulsante Dettagli punto di connessione per specificare i dettagli sui due oggetti punto di connessione.Click the Connection Point Details button again, to indicate details about the two connection point objects.

Commenti

Ogni connessione Web part è costituita da due controlli server che condividono i dati: un controllo è il consumer, l'altro è il provider.Every Web Parts connection consists of two server controls sharing data: one control is the consumer, the other is the provider. Per informazioni sui componenti essenziali di una connessione Web part e sull'oggetto Connection stesso, vedere WebPartConnection Cenni preliminari sulla classe.For a discussion of the essential components of a Web Parts connection, and the connection object itself, see the WebPartConnection class overview. Ogni connessione Web part richiede punti di connessione.Every Web Parts connection requires connection points. Il provider e il controllo consumer devono avere almeno un oggetto definito ConnectionPoint (ognuno di essi può disporre facoltativamente di più punti di connessione) che contiene i dettagli relativi alla modalità di connessione di un controllo a un altro controllo e al tipo di dati che può condividere.The provider and the consumer control must each have at least one defined ConnectionPoint object (each of them can optionally have multiple connection points) that contains the details for how a control can connect to another control and the type of data it can share. In una connessione effettiva, il provider ha il proprio tipo di oggetto punto di connessione (derivato dalla classe ConnectionPoint base), un' ProviderConnectionPoint istanza di e il consumer ha il proprio oggetto, ConsumerConnectionPoint un'istanza di.In an actual connection, the provider has its own type of connection point object (derived from the base ConnectionPoint class), a ProviderConnectionPoint instance, and the consumer has its own object, a ConsumerConnectionPoint instance.

Per creare un punto di connessione del provider, gli sviluppatori devono aggiungere un metodo di callback al provider che restituirà un'istanza dell'interfaccia implementata a un consumer.To create a provider connection point, developers must add a callback method to the provider that will return an implemented interface instance to a consumer. Devono contrassegnare il metodo di callback nel codice sorgente con un ConnectionProvider attributo Code (vedere la ConnectionProviderAttribute classe).They must mark the callback method in the source code with a ConnectionProvider code attribute (see the ConnectionProviderAttribute class). Analogamente, per creare un punto di connessione consumer, gli sviluppatori devono aggiungere un metodo al consumer che riceve un'istanza di interfaccia ed è necessario contrassegnare il metodo con ConnectionConsumerAttribute un ConnectionConsumer attributo (vedere la classe).Similarly, to create a consumer connection point, developers must add a method to the consumer that receives an interface instance, and they must mark that method with a ConnectionConsumer attribute (see the ConnectionConsumerAttribute class).

Quando gli sviluppatori creano connessioni in una pagina Web, possono essere create come connessioni statiche o dinamiche.When developers create connections on a Web page, they can be created as static or dynamic connections. Le connessioni statiche sono dichiarate nel markup di una pagina Web.Static connections are declared in the markup of a Web page. Quando viene dichiarata una connessione statica, gli sviluppatori possono designare i punti di connessione usati sia per il consumer che per il provider ProviderConnectionPointID assegnando valori agli <asp:webpartconnection> attributi e ConsumerConnectionPointID all'interno del tag dell'elemento.When a static connection is declared, developers can designate which connection points are used for both the consumer and provider by assigning values to the ProviderConnectionPointID and ConsumerConnectionPointID attributes within the <asp:webpartconnection> element tag. Questo approccio è particolarmente utile se sono presenti più punti di connessione definiti all'interno dei controlli consumer e provider, perché consente alla connessione statica di identificare i punti di connessione da utilizzare per la connessione.This approach is especially useful if there are multiple connection points defined within the consumer and provider controls, because it enables the static connection to identify which connection points to use for the connection.

Le connessioni dinamiche vengono create a livello di programmazione, dal codice di uno sviluppatore o dagli utenti attraverso l'interfaccia utente fornita dal ConnectionsZone controllo.Dynamic connections are created programmatically, either by a developer's code or by users through the user interface (UI) provided by the ConnectionsZone control. Per creare una connessione nel codice, gli sviluppatori devono ottenere un'istanza di WebPartConnection un oggetto chiamando il ConnectWebParts metodo sul WebPartManager controllo.To create a connection in code, developers must get an instance of a WebPartConnection object by calling the ConnectWebParts method on the WebPartManager control. Prima di poter chiamare questo metodo, gli sviluppatori devono avere riferimenti ai controlli server consumer e provider e ai rispettivi oggetti punto di connessione.Before they can call this method, developers must have references to the consumer and provider server controls and their respective connection point objects. Per ottenere riferimenti ai punti di connessione per un provider e un controllo consumer, gli sviluppatori chiamano GetProviderConnectionPoints prima GetConsumerConnectionPoints i metodi e WebPartManager sul controllo.To get references to the connection points for a provider and a consumer control, developers first call the GetProviderConnectionPoints and GetConsumerConnectionPoints methods on the WebPartManager control. Questi metodi restituiscono gli oggetti punto di connessione appropriati, che a loro volta possono essere passati al metodo per la creazione di una connessione.These methods return the appropriate connection point objects, which in turn can be passed to the method for creating a connection.

Quando gli oggetti del punto di connessione del provider e del consumer funzionano entrambi con lo stesso tipo di interfaccia, sono compatibili e possono formare una connessione diretta per condividere i dati.When the provider's and the consumer's connection point objects both work with the same type of interface, they are compatible and can form a direct connection to share data. Se non funzionano con lo stesso tipo di interfaccia, è necessario WebPartTransformer utilizzare un oggetto per convertire l'istanza dell'interfaccia dal provider in un tipo con cui il consumer può utilizzare.If they do not work with the same interface type, a WebPartTransformer object must be used to translate the interface instance from the provider into a type that the consumer can work with.

La classe ConnectionPoint astratta fornisce i dettagli di base dei punti di connessione condivisi dai controlli consumer e provider.The abstract ConnectionPoint class provides the base details of connection points that are shared by both consumer and provider controls. Diverse proprietà contengono questi dettagli.Several properties contain these details. La AllowsMultipleConnections proprietà indica se un punto di connessione può partecipare a più di una connessione alla volta.The AllowsMultipleConnections property indicates whether a connection point can participate in more than one connection at a time. Per impostazione predefinita, i punti di connessione del provider possono partecipare a più connessioni e i punti di connessione consumer non possono.By default, provider connection points can participate in multiple connections, and consumer connection points cannot. La ControlType proprietà indica il tipo del controllo server associato a un punto di connessione.The ControlType property indicates the type of the server control associated with a connection point. Si noti che non WebPart solo i controlli possono formare connessioni; qualsiasi controllo server, un controllo ASP.NET, un controllo personalizzato o un controllo utente, può essere abilitato per partecipare alle connessioni se posizionate in WebPartZoneBase una zona.Note that not only WebPart controls can form connections; any server control, whether an ASP.NET control, a custom control, or a user control, can be enabled to participate in connections if placed in a WebPartZoneBase zone. La DisplayName proprietà fornisce un nome descrittivo per il punto di connessione che può essere visualizzato nell'interfaccia utente per aiutare gli utenti che creano connessioni.The DisplayName property provides a friendly name for the connection point that can be displayed in the UI to assist users who are creating connections. La ID proprietà funge da identificatore di stringa per l'oggetto punto di connessione.The ID property serves as a string identifier for the connection point object itself. La InterfaceType proprietà indica il tipo di istanza dell'interfaccia che il punto di connessione riconosce.The InterfaceType property indicates what type of interface instance the connection point understands. Se un determinato punto di connessione fornisce o utilizza un'istanza di tale interfaccia è determinata dal fatto che si tratti ProviderConnectionPoint di un ConsumerConnectionPoint oggetto o.Whether a given connection point provides or consumes an instance of that interface is determined by whether it is a ProviderConnectionPoint or a ConsumerConnectionPoint object.

La ConnectionPoint classe dispone di un solo metodo.The ConnectionPoint class has one method. Il GetEnabled metodo restituisce un valore booleano che indica se un punto di connessione è attualmente in grado di partecipare alle connessioni.The GetEnabled method returns a Boolean value indicating whether a connection point is currently able to participate in connections.

La ConnectionPoint classe dispone anche di un campo pubblico DefaultID,.The ConnectionPoint class also has one public field, DefaultID. Questo campo contiene un valore utilizzato per identificare il punto di connessione predefinito in una connessione.This field contains a value used to identify the default connection point in a connection.

Nota

Gli attributi per la specifica dei metodi del punto di connessione hanno un displayNamesolo parametro obbligatorio,, pertanto è possibile creare l'attributo del punto di connessione predefinito senza specificare un ID.The attributes for specifying connection point methods have only one required parameter, displayName, so it is possible to create the default connection point attribute without specifying an ID. In questi casi, il DefaultID campo fornisce un valore di base da usare.In such cases, the DefaultID field supplies a base value to use.

Campi

DefaultID

Rappresenta una stringa utilizzata per identificare il punto di connessione predefinito in un insieme di punti di connessione associati a un controllo server.Represents a string used to identify the default connection point within a collection of connection points associated with a server control.

Proprietà

AllowsMultipleConnections

Ottiene un valore che indica se un punto di connessione supporta più connessioni simultanee.Gets a value that indicates whether a connection point supports multiple simultaneous connections.

ControlType

Ottiene la classe Type del controllo server a cui è associato un punto di connessione.Gets the Type of the server control with which a connection point is associated.

DisplayName

Ottiene una stringa che costituisce un nome descrittivo per rappresentare una connessione nell'interfaccia utente.Gets a string that serves as a friendly display name to represent a connection point in the user interface (UI).

ID

Ottiene una stringa contenente l'identificatore per un punto di connessione.Gets a string that contains the identifier for a connection point.

InterfaceType

Ottiene il tipo dell'interfaccia utilizzata da un punto di connessione.Gets the type of the interface used by a connection point.

Metodi

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.Determines whether the specified object is equal to the current object.

(Ereditato da Object)
GetEnabled(Control)

Restituisce un valore che indica se un punto di connessione può prendere parte alle connessioni.Returns a value that indicates whether a connection point can participate in connections.

GetHashCode()

Funge da funzione hash predefinita.Serves as the default hash function.

(Ereditato da Object)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.Gets the Type of the current instance.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.Creates a shallow copy of the current Object.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.Returns a string that represents the current object.

(Ereditato da Object)

Si applica a

Vedi anche