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.

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

Esempio

L'esempio di codice seguente illustra modi semplici per creare una connessione in modo dichiarativo, a livello di codice o tramite l'interfaccia utente, in ogni caso usando un punto di connessione consumer.

L'esempio ha quattro parti:

  • Controllo utente che consente di modificare la modalità di visualizzazione web part in una pagina.

  • Codice sorgente per un'interfaccia e due WebPart controlli che fungono da provider e consumer per una connessione.

  • Una pagina Web per ospitare tutti i controlli ed eseguire l'esempio di codice.

  • Spiegazione di come eseguire la pagina di esempio.

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. Salvare il codice sorgente seguente in un file con estensione ascx, assegnandogli il nome file assegnato all'attributo Src della Register direttiva per questo controllo utente, che si trova nella parte superiore della pagina Web di hosting. 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 una pagina Web part.

<%@ 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=" 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=" 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. Il file di origine contiene un'interfaccia semplice denominata IZipCode. Esiste anche una WebPart classe denominata ZipCodeWebPart che implementa l'interfaccia e funge da controllo del provider. L'altra WebPart classe è denominata WeatherWebParte funge da consumer per la connessione. Questa classe ha un metodo denominato GetZipCode che ottiene un'istanza dell'interfaccia IZipCode dal controllo provider. Si noti che questo metodo viene contrassegnato come metodo del punto di connessione del consumer con un ConnectionConsumer attributo nei relativi metadati. Si tratta del meccanismo per identificare il metodo del punto di connessione nel controllo consumer.

Per eseguire l'esempio di codice, è necessario compilare questo codice sorgente. È possibile compilarlo in modo esplicito e inserire l'assembly risultante nella cartella Bin del sito Web o nella Global Assembly Cache. In alternativa, è possibile inserire il codice sorgente nella cartella App_Code del sito, in cui verrà compilato in modo dinamico in fase di esecuzione. In questo esempio di codice viene usata la compilazione dinamica. Per una procedura dettagliata che illustra come eseguire la compilazione, vedere Procedura dettagliata: sviluppo e uso di un controllo server Web personalizzato.

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. 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. La connessione stessa viene creata in modo dichiarativo all'interno dell'elemento <staticconnections> nella pagina. In questo modo viene illustrato un modo per creare una connessione. Si noti l'attributo ConsumerConnectionPointID nell'elemento <asp:webpartconnection> . È anche possibile creare la connessione a livello di codice; il codice per eseguire questa operazione si trova nel Button1_Click metodo . In questo caso, viene creato un ConsumerConnectionPoint oggetto e quindi passato a un metodo che crea la connessione effettiva. Indipendentemente dal fatto che la connessione venga creata in modo dichiarativo o a livello di codice, i punti di connessione devono essere sempre specificati sia per il provider che per il consumer. Il Button2_Click metodo accede ConnectionPoint agli oggetti sia per il provider che per il consumer e scrive alcuni dei relativi valori di proprietà in un'etichetta nella pagina.

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

Dopo aver caricato la pagina in un browser, fare clic sul pulsante Dettagli punto di connessione . Viene visualizzato il provider e i punti di connessione consumer stabiliti nella connessione dichiarativa. Usare quindi il controllo a discesa Modalità di visualizzazione per attivare la modalità di connessione della pagina. Nel menu dei verbi del controllo ProviderWebPart di cap code (rappresentato da una freccia verso il basso nella barra del titolo), fare clic sul verbo di connessione. L'interfaccia utente di connessione viene visualizzata, creata automaticamente dal <asp:connectionszone> controllo dichiarato nella pagina. Si tratta di un altro modo per creare una connessione (tramite l'interfaccia utente), insieme ai metodi dichiarativi e programmatici descritti in precedenza. Fare clic sul pulsante Disconnetti per terminare la connessione statica esistente. Fare clic sul collegamento Crea una connessione a un consumer . L'interfaccia utente visualizza ora un controllo a discesa che elenca il nome visualizzato del punto di connessione consumer. Selezionare il punto di connessione nell'elenco a discesa e quindi fare clic su Connetti per completare la connessione. Fare quindi di nuovo clic su Disconnetti . Fare clic sul pulsante Connessione dinamica per creare una connessione a livello di codice. Utilizzare il controllo Modalità di visualizzazione per restituire la pagina in modalità di esplorazione. Fare di nuovo clic sul pulsante Dettagli punto di connessione per indicare i dettagli sull'oggetto punto di connessione consumer ancora una volta.

L'esempio ha dimostrato di stabilire una connessione e di usare un punto di connessione consumer in tre modi: una connessione statica dichiarata nel markup della pagina Web; una connessione creata nel codice che ha usato un ConsumerConnectionPoint oggetto e una connessione creata da un utente tramite l'interfaccia utente della connessione.

Commenti

In ogni connessione web part 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 sia designato come provider o consumer per la connessione. 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. Per un controllo che funge da consumer in una connessione, il punto di connessione deve essere un ConsumerConnectionPoint oggetto . Per informazioni dettagliate sulle connessioni web part e sui punti di connessione, leggere gli argomenti elencati nella sezione Vedere anche sotto.

Per creare un ConsumerConnectionPoint oggetto, sono necessari diversi passaggi:

  1. Abilitare un controllo consumer per fare riferimento a un'istanza di interfaccia. Un WebPart controllo server o un altro (qualsiasi tipo di controllo server che verrà aggiunto a una WebPartZoneBase zona può essere usato) deve essere in grado di utilizzare i dati da un'istanza di interfaccia specifica. Il controllo non deve implementare l'interfaccia; solo il provider deve implementarlo. Il consumer può usare il tipo di interfaccia esatto servito da un provider oppure, in caso contrario, un WebPartTransformer oggetto può essere usato per trasformare i dati dal tipo di interfaccia di un provider a un tipo compreso dal consumer. Un modo tipico per abilitare un consumer consiste nel dichiarare un campo privato in modo che contenga un riferimento al tipo di interfaccia desiderato.

  2. Identificare un metodo di callback. Un metodo nel consumer deve essere identificato come metodo di callback per stabilire una connessione con il provider. Questo metodo recupera un'istanza dell'interfaccia implementata dal provider e la assegna al campo privato creato nel primo passaggio. L'approccio web part per identificare un metodo di callback nel consumer consiste nell'aggiungere un ConnectionConsumer attributo di metadati (definito dalla ConnectionConsumerAttribute classe) al metodo che riceve l'istanza dell'interfaccia. Quando viene aggiunto l'attributo, l'unico parametro obbligatorio è un nome visualizzato da usare per il punto di connessione consumer. È anche possibile aggiungere parametri facoltativi, ad esempio un ID.

  3. Elaborare e restituire i dati dall'istanza dell'interfaccia. Eseguire qualsiasi elaborazione interna in base alle esigenze sui dati e in genere un controllo consumer eseguirà il rendering dei dati nella pagina. Un modo comune per eseguire questa operazione consiste nell'eseguire l'override del metodo del OnPreRender controllo.

    Nota

    Durante una richiesta sincrona, un consumer deve richiedere i dati direttamente dal provider durante o immediatamente dopo l'evento PreRender . Durante una richiesta asincrona, se il metodo di callback del provider non viene chiamato in alcun punto durante il rendering, lo sviluppatore può presupporre che nessun dato sia stato inviato al consumer.

Dopo che un controllo è stato attrezzato per fungere da consumer, il controllo può partecipare alle connessioni (presupponendo che sia anche dotato e disponibile un controllo del provider). Per creare una connessione statica dichiarativa nel markup di una pagina Web, gli sviluppatori possono usare l'elemento <asp:webpartconnection> . Se l'attributo ConnectionConsumer nel codice sorgente del consumer che identifica il metodo di callback specifica un ID per il punto di connessione, tale valore deve essere assegnato all'attributo ConsumerConnectionPointID nell'elemento <asp:webpartconnection> in una pagina. Un motivo per cui uno sviluppatore può specificare un ID per un punto di connessione consumer è se sono presenti più punti di connessione definiti nel controllo consumer. Se non viene specificato un ID per il punto di connessione consumer nel controllo consumer, non è necessario assegnare un valore all'attributo ConsumerConnectionPointID nella pagina, perché la connessione verrà creata utilizzando un valore predefinito ottenuto dal DefaultID campo.

Per creare una connessione nel codice, gli sviluppatori devono creare un nuovo ConsumerConnectionPoint oggetto chiamando il GetConsumerConnectionPoints metodo e passandolo all'ID del controllo consumer, insieme all'ID o all'indice dell'oggetto definito ConsumerConnectionPoint nel controllo consumer. L'oggetto restituito ConsumerConnectionPoint , insieme a un riferimento al controllo consumer, un riferimento al controllo provider e un oggetto corrispondente ProviderConnectionPoint , vengono tutti passati al ConnectWebParts metodo per creare un nuovo WebPartConnection oggetto.

Anche se gli sviluppatori possono usare punti di connessione consumer come parte di stabilire connessioni in modo dichiarativo o a livello di codice, gli utenti possono anche interagire con i punti di connessione consumer per stabilire connessioni tramite l'interfaccia utente. Se gli sviluppatori dichiarano un ConnectionsZone controllo in una pagina Web, fornisce un'interfaccia utente di runtime per consentire agli utenti di creare connessioni. Se gli utenti scelgono il controllo del 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 i nomi visualizzati del punto di connessione consumer disponibile (o punti se sono presenti più) a cui il provider può inviare i dati. Gli utenti devono selezionare un punto di connessione consumer per stabilire una connessione.

Un ConsumerConnectionPoint oggetto associa direttamente a un controllo consumer specifico e archivia i dettagli su una connessione nelle proprietà che eredita dalla classe base ConnectionPoint . Ad esempio, nella proprietà ereditata InterfaceType , un punto di connessione consumer mantiene il tipo di interfaccia usato. Se il provider e il consumer in una connessione conoscono entrambi il tipo di interfaccia, i controlli sono compatibili e in grado di formare una connessione diretta. Se il provider e il consumer non possono funzionare con lo stesso tipo di interfaccia, sono incompatibili e devono usare un WebPartTransformer oggetto per convertire la proprietà del punto di connessione del InterfaceType provider in un tipo che il consumer può utilizzare. Un'altra proprietà ereditata importante è la DisplayName 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. Il nome visualizzato è il parametro obbligatorio quando gli sviluppatori aggiungono un ConnectionConsumer attributo al metodo di callback in un controllo consumer. La proprietà ereditata ID è utile anche, come indicato in precedenza, perché fornisce un identificatore univoco per un punto di connessione consumer nel caso in cui un consumer abbia più punti di connessione. Un consumer può avere più ConsumerConnectionPoint oggetti definiti in esso e, in questo caso, quando gli sviluppatori aggiungono l'attributo ConnectionConsumer a un metodo, devono specificare un valore ID per distinguere ogni punto di connessione. Un'altra proprietà ereditata rilevante è la AllowsMultipleConnections proprietà , che indica se un punto di connessione consumer può connettersi contemporaneamente a più provider. Questo valore della proprietà è false per impostazione predefinita per i punti di connessione consumer , mentre per impostazione predefinita per i true punti di connessione del provider.

La ConsumerConnectionPoint classe aggiunge diversi metodi univoci ai membri che eredita dalla ConnectionPoint classe . Il SetObject metodo richiama il metodo di callback definito del consumer per recuperare l'istanza dell'interfaccia dal 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.

Costruttori

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

Inizializza una nuova istanza della classe ConsumerConnectionPoint.

Proprietà

AllowsMultipleConnections

Ottiene un valore che indica se un punto di connessione supporta più connessioni simultanee.

(Ereditato da ConnectionPoint)
ControlType

Ottiene la classe Type del controllo server a cui è associato un punto di connessione.

(Ereditato da ConnectionPoint)
DisplayName

Ottiene una stringa che costituisce un nome descrittivo per rappresentare una connessione nell'interfaccia utente.

(Ereditato da ConnectionPoint)
ID

Ottiene una stringa contenente l'identificatore per un punto di connessione.

(Ereditato da ConnectionPoint)
InterfaceType

Ottiene il tipo dell'interfaccia utilizzata da un punto di connessione.

(Ereditato da ConnectionPoint)

Metodi

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetEnabled(Control)

Restituisce un valore che indica se un punto di connessione può prendere parte alle connessioni.

(Ereditato da ConnectionPoint)
GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(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.

SupportsConnection(Control, ConnectionInterfaceCollection)

Determina se un punto di connessione del consumer è attualmente in grado di stabilire una connessione.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Si applica a

Vedi anche