ProviderConnectionPoint Classe

Definizione

Consente di definire un oggetto punto di connessione per l'abilitazione di un controllo server che funge da provider per creare una connessione con un consumer.Defines a connection point object that enables a server control acting as a provider to form a connection with a consumer.

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

Esempi

Nell'esempio di codice seguente 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 del provider.The following code example shows simple ways to create a connection declaratively, programmatically, or through the UI, in each case making use of a provider 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. 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. Viene illustrato un modo ProviderConnectionPointID <asp:webpartconnection> per creare una connessione. si noti l'attributo nell'elemento.This demonstrates one way of creating a connection--note the ProviderConnectionPointID 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 ProviderConnectionPoint creato un oggetto che viene quindi passato a un metodo che crea la connessione effettiva.In this case, a ProviderConnectionPoint 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 utente WebPart del 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 ConsumerWebPart 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 provider .Click the Create a Connection to a Provider link. L'interfaccia utente visualizza ora un controllo a discesa che elenca il nome visualizzato del punto di connessione provider.The UI now displays a drop-down control that lists the provider 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. Quindi, fare clic sul pulsante Dynamic Connection (connessione dinamica ) per creare una connessione a livello di programmazione.Then, 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 nuovamente clic sul pulsante Dettagli punto di connessione per specificare i dettagli relativi all'oggetto punto di connessione provider.Click the Connection Point Details button again, to once more indicate details about the provider connection point object.

Nell'esempio è stata illustrata la creazione di una connessione e l'utilizzo di un punto di connessione del provider in tre modi: una connessione statica dichiarata nel markup della pagina Web. connessione creata nel codice che utilizza un ProviderConnectionPoint oggetto e una connessione creata da un utente tramite l'interfaccia utente di connessione.The example has demonstrated establishing a connection and using a provider connection point in three ways: a static connection declared in the Web page markup; a connection created in code that used a ProviderConnectionPoint 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 provider in una connessione, il punto di connessione deve essere ProviderConnectionPoint un oggetto.For a control acting as the provider in a connection, its connection point must be a ProviderConnectionPoint object. Per informazioni dettagliate sulle connessioni Web part e sui punti di connessione, vedere gli argomenti elencati nella sezione vedere anche di seguito.For details on Web Parts connections and connection points, see the topics listed in the See Also section below.

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

  1. Creare un'interfaccia.Create an interface. Quando un provider condivide i dati con un consumer, lo esegue ottenendo un'istanza di un'interfaccia e restituendo tale istanza a un consumer.When a provider shares data with a consumer, it does so by getting an instance of an interface, and returning that instance to a consumer.

  2. Implementare l'interfaccia in un provider.Implement the interface in a provider. Un WebPart o un altro controllo server (qualsiasi tipo di controllo server in WebPartZoneBase una zona può essere usato) che sarà il provider deve implementare l'interfaccia creata nel primo passaggio.A WebPart or other server control (any type of server control in a WebPartZoneBase zone can be used) that will be the provider must implement the interface created in the first step.

  3. Identificare un metodo di callback.Identify a callback method. Un metodo del provider deve essere identificato come metodo di callback per stabilire una connessione.A method in the provider must be identified as the callback method to establish a connection. Questo metodo restituisce un'istanza dell'interfaccia implementata a un consumer.This method returns an instance of the implemented interface to a consumer. L'approccio Web part per identificare un metodo di callback nel provider consiste nell'aggiungere un ConnectionProvider attributo di metadati (definito ConnectionProviderAttribute dalla classe) al metodo che restituisce l'istanza dell'interfaccia.The Web Parts approach for identifying a callback method in the provider is to add a ConnectionProvider metadata attribute (defined by the ConnectionProviderAttribute class) to the method that returns the interface instance. Quando l'attributo viene aggiunto, l'unico parametro obbligatorio è un nome visualizzato da utilizzare per il punto di connessione del provider.When the attribute is added, the only required parameter is a display name to use for the provider connection point. È anche possibile aggiungere parametri facoltativi, ad esempio un ID per il punto di connessione.Optional parameters can also be added, such as an ID for the connection point.

Dopo che un controllo è stato attrezzato per fungere da provider, il controllo può partecipare alle connessioni (presupponendo che un controllo consumer sia dotato e disponibile in modo analogo).After a control has been equipped to act as a provider, the control can participate in connections (assuming that a consumer control is similarly 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' ConnectionProvider attributo nel codice sorgente del provider che identifica il metodo di callback specifica un ID per il punto di connessione, tale valore deve essere assegnato ProviderConnectionPointID all'attributo nell' <asp:webpartconnection> elemento di una pagina.If the ConnectionProvider attribute in the provider source code that identifies the callback method specifies an ID for the connection point, then that value must be assigned to the ProviderConnectionPointID attribute in the <asp:webpartconnection> element on a page. Un motivo per cui uno sviluppatore potrebbe specificare un ID per un punto di connessione provider è se sono presenti più punti di connessione nel controllo provider.One reason that a developer might specify an ID for a provider connection point is if there are multiple connection points in the provider control. Se non viene specificato un ID per il punto di connessione del provider nel controllo provider, non è necessario assegnare un valore all' ProviderConnectionPointID 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 provider connection point in the provider control, a value does not have to be assigned to the ProviderConnectionPointID 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 ProviderConnectionPoint nuovo oggetto chiamando il GetProviderConnectionPoints metodo e passandogli l'ID del controllo provider, insieme all'ID o all'indice dell'oggetto definito ProviderConnectionPoint nel controllo provider.To create a connection in code, developers must create a new ProviderConnectionPoint object by calling the GetProviderConnectionPoints method and passing to it the ID of the provider control, along with the ID or index of the defined ProviderConnectionPoint object in the provider control. L'oggetto ProviderConnectionPoint restituito, insieme a un riferimento al controllo provider, a un riferimento al controllo consumer e a un oggetto ConsumerConnectionPoint corrispondente, ConnectWebParts vengono tutti passati al metodo per creare un nuovo WebPartConnection oggetto.The returned ProviderConnectionPoint object, along with a reference to the provider control, a reference to the consumer control, and a corresponding ConsumerConnectionPoint object, are all passed to the ConnectWebParts method to create a new WebPartConnection object.

Sebbene gli sviluppatori possano usare i punti di connessione del provider come parte del tentativo di stabilire connessioni in modo dichiarativo o a livello di codice, gli utenti possono anche interagire con i punti di connessione del provider per stabilire connessioni tramite l'interfaccia utente (UI).Although developers can use provider connection points as part of establishing connections either declaratively or programmatically, users can also interact with provider 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 consumer come punto di partenza per stabilire la connessione facendo clic sul verbo di connessione (possono anche scegliere il provider; non esiste alcuna differenza nella connessione risultante), nell'interfaccia utente verrà visualizzato un controllo elenco a discesa con il nome visualizzato del punto di connessione del provider disponibile (oppure indica se sono presenti più di uno).If users choose the consumer control as the starting point for establishing the connection by clicking its connect verb (they could also choose the provider; there is no difference in the resulting connection), in the UI they will see a drop-down list control with the display name of the available provider connection point (or points if there are multiple ones). Per creare una connessione, gli utenti devono selezionare un punto di connessione provider.Users must select a provider connection point to create a connection.

Un ProviderConnectionPoint oggetto associa direttamente a un controllo provider specifico e archivia i dettagli relativi a una connessione nelle proprietà che eredita dalla classe di ConnectionPoint base.A ProviderConnectionPoint object associates directly with a specific provider 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 provider mantiene il tipo di interfaccia restituito dal provider.For example, in the inherited InterfaceType property, a provider connection point keeps the type of interface returned by the provider. Se il provider e il consumer in una connessione funzionano entrambi con lo stesso tipo di interfaccia, i controlli sono compatibili e possono formare una connessione diretta.If the provider and consumer in a connection both work with the same 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 il InterfaceType valore 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 value 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 affinché gli utenti scelgano un punto di connessione del provider durante la creazione delle connessioni.Another important inherited property is the DisplayName property, which provides a friendly name to display in the UI for users to choose a provider connection point when creating connections. Il nome visualizzato è il parametro obbligatorio quando gli sviluppatori aggiungono un ConnectionProvider attributo al metodo di callback in un controllo provider.The display name is the required parameter when developers add a ConnectionProvider attribute to the callback method in a provider control. La proprietà ID ereditata è utile anche come indicato in precedenza, poiché fornisce un identificatore univoco per un punto di connessione del provider nel caso in cui un provider disponga di più punti di connessione.The inherited ID property is also useful, as indicated above, because it provides a unique identifier for a provider connection point in the event that a provider has multiple connection points. Un provider può avere più ProviderConnectionPoint oggetti definiti e, in questo caso, quando gli sviluppatori aggiungono l' ConnectionProvider attributo a un metodo, è necessario specificare un valore ID per distinguere ogni punto di connessione.A provider can have multiple ProviderConnectionPoint objects defined in it, and in this case, when developers add the ConnectionProvider 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 del provider è in grado di connettersi contemporaneamente a più consumer.One other notable inherited property is the AllowsMultipleConnections property, which indicates whether a provider connection point can connect simultaneously to multiple consumers. Il valore di questa true proprietà è per impostazione predefinita per i punti di connessione del provider false (mentre per i punti di connessione del consumer viene utilizzato per impostazione predefinita)This property value is true by default for provider connection points (whereas it defaults to false for consumer connection points).

La ProviderConnectionPoint classe aggiunge diversi metodi univoci ai membri che eredita ConnectionPoint dalla classe.The ProviderConnectionPoint class adds several unique methods to the members it inherits from the ConnectionPoint class. Il GetObject metodo recupera un'istanza dell'interfaccia che il metodo di callback tornerà ai consumer.The GetObject method retrieves an instance of the interface that the callback method will return to consumers. Il GetSecondaryInterfaces metodo recupera interfacce consumer aggiuntive che fanno parte di una connessione esistente, ma che non sono interfacce utilizzate per stabilire la connessione.The GetSecondaryInterfaces method retrieves additional consumer interfaces that are part of an existing connection, but are not the interfaces used to establish the connection.

Costruttori

ProviderConnectionPoint(MethodInfo, Type, Type, String, String, Boolean)

Inizializza una nuova istanza della classe ProviderConnectionPoint.Initializes a new instance of the ProviderConnectionPoint 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)
GetObject(Control)

Richiama il metodo di callback in un controllo provider che ottiene un'istanza di interfaccia da restituire ai consumer.Invokes the callback method in a provider control that gets an interface instance to return to consumers.

GetSecondaryInterfaces(Control)

Ottiene in insieme facoltativo di interfacce secondarie che possono essere supportate da un punto di connessione provider.Gets an optional collection of secondary interfaces that can be supported by a provider connection point.

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