ConsumerConnectionPoint Classe

Definizione

Definisce un oggetto punto di connessione che consente a un controllo server di agire da consumer per la creazione di una connessione con un provider.Defines a connection point object that enables a server control acting as a consumer to form a connection with a provider.

public ref class ConsumerConnectionPoint : System::Web::UI::WebControls::WebParts::ConnectionPoint
public class ConsumerConnectionPoint : System.Web.UI.WebControls.WebParts.ConnectionPoint
type ConsumerConnectionPoint = class
    inherit ConnectionPoint
Public Class ConsumerConnectionPoint
Inherits ConnectionPoint
Ereditarietà
ConsumerConnectionPoint

Esempi

Nell'esempio di codice riportato di seguito vengono illustrati i modi semplici per creare una connessione in modo dichiarativo, a livello di codice o tramite l'interfaccia utente, in ogni caso utilizzando un punto di connessione consumer.The following code example shows simple ways to create a connection declaratively, programmatically, or through the UI, in each case making use of a consumer connection point.

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. 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. Viene illustrato un modo ConsumerConnectionPointID <asp:webpartconnection> per creare una connessione. si noti l'attributo nell'elemento.This demonstrates one way of creating a connection--note the ConsumerConnectionPointID attribute in the <asp:webpartconnection> element. È anche possibile creare la connessione a livello di programmazione; il codice per eseguire questa operazione è nel Button1_Click metodo.You can also create the connection programmatically; the code for doing that is in the Button1_Click method. In questo caso, viene ConsumerConnectionPoint creato un oggetto che viene quindi passato a un metodo che crea la connessione effettiva.In this case, a ConsumerConnectionPoint object is created and then passed to a method that creates the actual connection. 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 del controllo del provider WebPart di codice postale (rappresentato da una freccia verso il basso nella barra del titolo) fare clic sul verbo Connect.On the verbs menu of the ZIP Code ProviderWebPart control (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. Si tratta di un altro modo per creare una connessione (tramite l'interfaccia utente), insieme ai metodi dichiarativi e programmatici descritti in precedenza.This is another way of creating a connection (through the UI), along with the declarative and programmatic methods discussed earlier. Fare clic sul pulsante Disconnetti per terminare la connessione statica esistente.Click the Disconnect button to terminate the existing static connection. Fare clic sul collegamento creare una connessione a un consumer .Click the Create a Connection to a Consumer link. L'interfaccia utente visualizza ora un controllo a discesa che elenca il nome visualizzato del punto di connessione consumer.The UI now displays a drop-down control that lists the consumer connection point display name. Selezionare il punto di connessione nell'elenco a discesa, quindi fare clic su Connetti per completare la connessione.Select the connection point in the drop-down list, and then click Connect to complete the connection. Quindi, fare di nuovo clic su Disconnetti .Next, click Disconnect again. Fare clic sul pulsante Dynamic Connection (connessione dinamica ) per creare una connessione a livello di codice.Click the Dynamic Connection button to create a connection programmatically. 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 di nuovo clic sul pulsante Dettagli punto di connessione per indicare più dettagliatamente l'oggetto del punto di connessione consumer.Click the Connection Point Details button again, to indicate details about the consumer connection point object once more.

Nell'esempio è stata illustrata la creazione di una connessione e l'utilizzo di un punto di connessione consumer in tre modi: una connessione statica dichiarata nel markup della pagina Web. connessione creata nel codice che utilizza un ConsumerConnectionPoint oggetto e una connessione creata da un utente tramite l'interfaccia utente di connessione.The example has demonstrated establishing a connection and using a consumer connection point in three ways: a static connection declared in the Web page markup; a connection created in code that used a ConsumerConnectionPoint object; and a connection created by a user through the connection UI.

Commenti

In ogni Web part connessione tra due controlli server, ogni controllo deve avere (tra gli altri requisiti) un oggetto punto di connessione associato che consente di connettersi all'altro controllo e di fornire o utilizzare i dati, a seconda che il controllo viene designato come provider o consumer per la connessione.In every Web Parts connection between two server controls, each control must have (among other requirements) an associated connection point object that enables it to connect to the other control and to either provide or consume data, depending on whether the control is designated as the provider or consumer for the connection. Un ConnectionPoint oggetto in generale contiene i dettagli relativi al modo in cui un controllo può connettersi a un altro controllo e al tipo di dati che può condividere.A ConnectionPoint object in general contains the details for how a control can connect to another control and the type of data it can share. Per un controllo che funge da consumer in una connessione, il punto di connessione deve ConsumerConnectionPoint essere un oggetto.For a control acting as the consumer in a connection, its connection point must be a ConsumerConnectionPoint object. Per informazioni dettagliate sulle connessioni Web part e sui punti di connessione, leggere gli argomenti elencati nella sezione vedere anche di seguito.For details on Web Parts connections and connection points, read the topics listed in the See Also section below.

Per creare un ConsumerConnectionPoint oggetto, sono necessari diversi passaggi:To create a ConsumerConnectionPoint object, several steps are required:

  1. Consente a un controllo consumer di fare riferimento a un'istanza di interfaccia.Enable a consumer control to reference an interface instance. Un WebPart o un altro controllo server (qualsiasi tipo di controllo server che verrà aggiunto a una WebPartZoneBase zona può essere utilizzato) deve essere in grado di utilizzare i dati di un'istanza di interfaccia specifica.A WebPart or other server control (any type of server control that will be added to a WebPartZoneBase zone can be used) must be able to consume data from a specific interface instance. Il controllo non deve implementare l'interfaccia. solo il provider deve implementarlo.The control need not implement the interface; only the provider must implement it. Il consumer può utilizzare esattamente il tipo di interfaccia servito da un provider oppure, in caso contrario, è possibile WebPartTransformer utilizzare un oggetto per trasformare i dati dal tipo di interfaccia del provider in un tipo riconosciuto dal consumer.The consumer can either work with the exact interface type served by a provider or, if it does not, a WebPartTransformer object can be used to transform data from a provider's interface type to a type understood by the consumer. Un modo tipico per consentire a un consumer è dichiarare un campo privato per contenere un riferimento al tipo di interfaccia desiderato.A typical way to enable a consumer is to declare a private field to contain a reference to the desired interface type.

  2. Identificare un metodo di callback.Identify a callback method. Un metodo del consumer deve essere identificato come metodo di callback per stabilire una connessione con il provider.A method in the consumer must be identified as the callback method to establish a connection with the provider. Questo metodo recupera un'istanza dell'interfaccia implementata dal provider e la assegna a (ad esempio) il campo privato creato nel primo passaggio.This method retrieves an instance of the interface that the provider implements, and assigns it to (for example) the private field created in the first step. L'approccio Web part per identificare un metodo di callback nel consumer consiste nell'aggiungere ConnectionConsumer un attributo di metadati (definito ConnectionConsumerAttribute dalla classe) al metodo che riceve l'istanza dell'interfaccia.The Web Parts approach for identifying a callback method in the consumer is to add a ConnectionConsumer metadata attribute (defined by the ConnectionConsumerAttribute class) to the method that receives the interface instance. Quando l'attributo viene aggiunto, l'unico parametro obbligatorio è un nome visualizzato da usare per il punto di connessione consumer.When the attribute is added, the only required parameter is a display name to use for the consumer connection point. È anche possibile aggiungere parametri facoltativi, ad esempio un ID.Optional parameters can also be added, such as an ID.

  3. Elaborare e restituire i dati dall'istanza dell'interfaccia.Process and output the data from the interface instance. Eseguire tutte le elaborazioni interne necessarie per i dati e, in genere, un controllo consumer eseguirà il rendering dei dati nella pagina.Perform any internal processing as needed on the data, and then typically a consumer control will render the data to the page. Un modo comune per eseguire questa operazione consiste nell'eseguire l'override OnPreRender del metodo del controllo.A common way of doing this is to override the control's OnPreRender method.

    Nota

    Durante una richiesta sincrona, un consumer deve richiedere i dati direttamente dal provider durante o immediatamente PreRender dopo l'evento.During a synchronous request, a consumer should request data directly from the provider during or immediately after the PreRender event. Durante una richiesta asincrona, se il metodo di callback del provider non viene chiamato in un punto qualsiasi durante il rendering, lo sviluppatore può presumere che non sia stato inviato alcun dato al consumer.During an asynchronous request, if the provider's callback method is not called at any point during rendering, the developer can assume that no data was sent to the consumer.

Dopo che un controllo è stato dotato di fungere da consumer, il controllo può partecipare alle connessioni (presupponendo che anche un controllo provider sia dotato e disponibile).After a control has been equipped to act as a consumer, the control can participate in connections (assuming that a provider control is also equipped and available). Per creare una connessione dichiarativa statica nel markup di una pagina Web, gli sviluppatori possono utilizzare <asp:webpartconnection> l'elemento.To create a static, declarative connection in the markup of a Web page, developers can use the <asp:webpartconnection> element. Se l' ConnectionConsumer attributo nel codice sorgente del consumer che identifica il metodo di callback specifica un ID per il punto di connessione, tale valore deve essere assegnato ConsumerConnectionPointID all'attributo nell' <asp:webpartconnection> elemento di una pagina.If the ConnectionConsumer attribute in the consumer source code that identifies the callback method specifies an ID for the connection point, then that value must be assigned to the ConsumerConnectionPointID attribute in the <asp:webpartconnection> element on a page. Un motivo per cui uno sviluppatore potrebbe specificare un ID per un punto di connessione consumer è se sono presenti più punti di connessione definiti nel controllo consumer.A reason that a developer might specify an ID for a consumer connection point is if there are multiple connection points defined in the consumer control. Se non viene specificato un ID per il punto di connessione consumer nel controllo consumer, non è necessario assegnare un valore all' ConsumerConnectionPointID attributo nella pagina, perché la connessione verrà creata utilizzando un valore predefinito ottenuto DefaultID dal parametro campo.If an ID is not specified for the consumer connection point in the consumer control, a value does not have to be assigned to the ConsumerConnectionPointID attribute in the page either, because the connection will be created using a default value obtained from the DefaultID field.

Per creare una connessione nel codice, gli sviluppatori devono creare un ConsumerConnectionPoint nuovo oggetto chiamando il GetConsumerConnectionPoints metodo e passandogli l'ID del controllo consumer, insieme all'ID o all'indice dell'oggetto definito ConsumerConnectionPoint nel controllo consumer.To create a connection in code, developers must create a new ConsumerConnectionPoint object by calling the GetConsumerConnectionPoints method and passing to it the ID of the consumer control, along with the ID or index of the defined ConsumerConnectionPoint object in the consumer control. L'oggetto ConsumerConnectionPoint restituito, insieme a un riferimento al controllo consumer, a un riferimento al controllo provider e a un oggetto ProviderConnectionPoint corrispondente, ConnectWebParts vengono tutti passati al metodo per creare un nuovo WebPartConnection oggetto.The returned ConsumerConnectionPoint object, along with a reference to the consumer control, a reference to the provider control, and a corresponding ProviderConnectionPoint object, are all passed to the ConnectWebParts method to create a new WebPartConnection object.

Sebbene gli sviluppatori possano utilizzare i punti di connessione consumer come parte della definizione di connessioni in modo dichiarativo o a livello di codice, gli utenti possono interagire anche con i punti di connessione consumer per stabilire connessioni tramite l'interfaccia utente (UI).Although developers can use consumer connection points as part of establishing connections either declaratively or programmatically, users can also interact with consumer connection points to establish connections through the user interface (UI). Se gli sviluppatori dichiarano un ConnectionsZone controllo in una pagina Web, fornisce un'interfaccia utente di run-time per consentire agli utenti di creare connessioni.If developers declare a ConnectionsZone control on a Web page, it provides a run-time UI for users to create connections. Se gli utenti scelgono il controllo provider come punto di partenza per stabilire la connessione facendo clic sul verbo di connessione (possono anche scegliere il consumer; non esiste alcuna differenza nella connessione risultante), nell'interfaccia utente verrà visualizzato un controllo elenco a discesa con il visualizzare i nomi del punto di connessione consumer disponibile (oppure indica se sono presenti più di uno) a cui il provider può inviare i dati.If users choose the provider control as the starting point for establishing the connection by clicking its connect verb (they could also choose the consumer; there is no difference in the resulting connection), in the UI they will see a drop-down list control with the display names of the available consumer connection point (or points if there are multiple ones) that the provider can send the data to. Gli utenti devono selezionare un punto di connessione consumer per stabilire una connessione.Users must select a consumer connection point to establish a connection.

Un ConsumerConnectionPoint oggetto associa direttamente a un controllo consumer specifico e archivia i dettagli relativi a una connessione nelle proprietà che eredita dalla classe ConnectionPoint di base.A ConsumerConnectionPoint object associates directly with a specific consumer control, and stores details about a connection in the properties it inherits from the base ConnectionPoint class. Nella proprietà ereditato InterfaceType , ad esempio, un punto di connessione consumer mantiene il tipo di interfaccia utilizzato.For example, in the inherited InterfaceType property, a consumer connection point keeps the type of interface it uses. Se il provider e il consumer in una connessione conoscono entrambi il tipo di interfaccia, i controlli sono compatibili e possono formare una connessione diretta.If the provider and consumer in a connection both understand the interface type, the controls are compatible and capable of forming a direct connection. Se il provider e il consumer non possono funzionare con lo stesso tipo di interfaccia, sono incompatibili e WebPartTransformer devono usare un oggetto per convertire la InterfaceType proprietà del punto di connessione del provider in un tipo con cui il consumer può lavorare.If the provider and consumer cannot work with the same interface type, they are incompatible and must use a WebPartTransformer object to translate the provider connection point's InterfaceType property into a type that the consumer can work with. Un'altra proprietà importante ereditata DisplayName è la proprietà, che fornisce un nome descrittivo da visualizzare nell'interfaccia utente per consentire agli utenti di scegliere un punto di connessione consumer durante la creazione di connessioni.Another important inherited property is the DisplayName property, which provides a friendly name to display in the UI for users to choose a consumer connection point when creating connections. Il nome visualizzato è il parametro obbligatorio quando gli sviluppatori aggiungono un ConnectionConsumer attributo al metodo di callback in un controllo consumer.The display name is the required parameter when developers add a ConnectionConsumer attribute to the callback method in a consumer control. La proprietà ID ereditata è utile anche come indicato in precedenza, perché fornisce un identificatore univoco per un punto di connessione consumer nel caso in cui un consumer disponga di più punti di connessione.The inherited ID property is also useful, as indicated above, because it provides a unique identifier for a consumer connection point in the event that a consumer has multiple connection points. Un consumer può includere ConsumerConnectionPoint più oggetti definiti e, in questo caso, quando gli sviluppatori aggiungono ConnectionConsumer l'attributo a un metodo, è necessario specificare un valore ID per distinguere ciascun punto di connessione.A consumer can have multiple ConsumerConnectionPoint objects defined in it, and in this case, when developers add the ConnectionConsumer attribute to a method, they should specify an ID value to distinguish each connection point. Un'altra proprietà rilevante ereditata è AllowsMultipleConnections la proprietà, che indica se un punto di connessione consumer può connettersi contemporaneamente a più provider.One other notable inherited property is the AllowsMultipleConnections property, which indicates whether a consumer connection point can connect simultaneously to multiple providers. Per impostazione predefinita, false il valore della proprietà è per i punti di connessione consumer true (mentre per i punti di connessione del provider viene utilizzato per impostazione predefinita).This property value is false by default for consumer connection points (whereas it defaults to true for provider connection points).

La ConsumerConnectionPoint classe aggiunge diversi metodi univoci ai membri che eredita ConnectionPoint dalla classe.The ConsumerConnectionPoint class adds several unique methods to the members it inherits from the ConnectionPoint class. Il SetObject metodo richiama il metodo di callback definito del consumer per recuperare l'istanza dell'interfaccia dal provider.The SetObject method invokes the consumer's own defined callback method to retrieve the interface instance from the provider. Il SupportsConnection metodo restituisce un valore booleano che indica se il punto di connessione è in grado di stabilire connessioni, in base allo stato corrente del controllo consumer associato.The SupportsConnection method returns a Boolean value that indicates whether the connection point is able to establish connections, based on the current state of the associated consumer control.

Costruttori

ConsumerConnectionPoint(MethodInfo, Type, Type, String, String, Boolean)

Inizializza una nuova istanza della classe ConsumerConnectionPoint.Initializes a new instance of the ConsumerConnectionPoint class.

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.

(Ereditato da ConnectionPoint)
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.

(Ereditato da ConnectionPoint)
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).

(Ereditato da ConnectionPoint)
ID

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

(Ereditato da ConnectionPoint)
InterfaceType

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

(Ereditato da ConnectionPoint)

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.

(Ereditato da ConnectionPoint)
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)
SetObject(Control, Object)

Chiama il metodo di callback in un controllo consumer e recupera l'istanza dell'interfaccia da un controllo provider.Invokes the callback method in a consumer control and retrieves the interface instance from a provider control.

SupportsConnection(Control, ConnectionInterfaceCollection)

Determina se un punto di connessione del consumer è attualmente in grado di stabilire una connessione.Determines whether a consumer connection point is currently capable of establishing a connection.

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