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.

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

Esempio

Nell'esempio di codice seguente vengono illustrati modi semplici per creare una connessione dichiarativa, a livello di codice o tramite l'interfaccia utente, in ogni caso usando un punto di connessione del provider.

L'esempio include 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.

  • 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, assegnandole il nome del 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. Il ProvideIZipCode metodo è il metodo di callback che implementa l'unico membro dell'interfaccia. Il metodo restituisce semplicemente un'istanza dell'interfaccia. Si noti che il metodo è contrassegnato con un ConnectionProvider attributo nei relativi metadati. Si tratta del meccanismo per identificare il metodo come metodo di callback per il punto di connessione 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 è 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 dinamicamente in fase di esecuzione. Questo esempio di codice usa la compilazione dinamica. Per una procedura dettagliata che illustra come compilare, 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 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 dichiarativamente all'interno dell'elemento <staticconnections> nella pagina. In questo modo viene illustrato un modo per creare una connessione, annotare l'attributo ProviderConnectionPointID nell'elemento <asp:webpartconnection> . È anche possibile creare la connessione a livello di codice; il codice per eseguire questa operazione è nel Button1_Click metodo . In questo caso viene creato un oggetto e quindi passato a un ProviderConnectionPoint metodo che crea la connessione effettiva. Se la connessione viene creata dichiarativamente 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 agli ConnectionPoint oggetti sia per il provider che per il consumer e scrive alcuni dei valori delle 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 cambiare la pagina in modalità di connessione. Nel menu verbi del controllo Consumer WebPartdi codice POSTALE (rappresentato da una freccia verso il basso nella barra del titolo), fare clic sul verbo di connessione. L'interfaccia <asp:connectionszone> utente di connessione viene visualizzata, creata automaticamente dal controllo dichiarato nella pagina. Si tratta di un altro modo per creare una connessione (tramite l'interfaccia utente), insieme ai metodi dichiarativi e programmatici illustrati in precedenza. Fare clic sul pulsante Disconnetti per terminare la connessione statica esistente. Fare clic sul collegamento Crea una connessione a un provider . L'interfaccia utente visualizza ora un controllo a discesa che elenca il nome visualizzato del punto di connessione del provider. 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 quindi clic sul pulsante Connessione dinamica per creare una connessione a livello di codice. Usare il controllo Modalità di visualizzazione per restituire la pagina per la modalità di esplorazione. Fare di nuovo clic sul pulsante Dettagli punto di connessione per indicare ancora una volta i dettagli sull'oggetto punto di connessione del provider.

L'esempio ha dimostrato di stabilire una connessione e di usare un punto di connessione provider in tre modi: una connessione statica dichiarata nel markup della pagina Web; una connessione creata nel codice che ha usato un ProviderConnectionPoint oggetto e una connessione creata da un utente tramite l'interfaccia utente di 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 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 provider in una connessione, il punto di connessione deve essere un ProviderConnectionPoint oggetto. Per informazioni dettagliate sulle connessioni web part e sui punti di connessione, vedere gli argomenti elencati nella sezione Vedere anche di seguito.

Per creare un ProviderConnectionPoint oggetto, sono necessari diversi passaggi:

  1. Creare un'interfaccia. Quando un provider condivide i dati con un consumer, lo fa ottenendo un'istanza di un'interfaccia e restituendo tale istanza a un consumer.

  2. Implementare l'interfaccia in un provider. Un WebPart controllo server o altro (qualsiasi tipo di controllo server in una WebPartZoneBase zona può essere usato) che sarà il provider deve implementare l'interfaccia creata nel primo passaggio.

  3. Identificare un metodo di callback. Un metodo nel provider deve essere identificato come metodo di callback per stabilire una connessione. Questo metodo restituisce un'istanza dell'interfaccia implementata a un consumer. L'approccio web part per identificare un metodo di callback nel provider consiste nell'aggiungere un ConnectionProvider attributo di metadati (definito dalla ConnectionProviderAttribute classe) al metodo che restituisce l'istanza dell'interfaccia. Quando l'attributo viene aggiunto, l'unico parametro obbligatorio è un nome visualizzato da usare per il punto di connessione del provider. È anche possibile aggiungere parametri facoltativi, ad esempio un ID per il punto di connessione.

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

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

Anche se gli sviluppatori possono usare i punti di connessione del provider come parte della creazione di connessioni dichiarative o a livello di codice, gli utenti possono anche interagire con i punti di connessione del provider per stabilire connessioni tramite l'interfaccia utente (interfaccia utente). Se gli sviluppatori dichiarano un controllo in una pagina Web, fornisce un'interfaccia ConnectionsZone utente in fase di esecuzione per gli utenti per creare connessioni. Se gli utenti scelgono il controllo consumer come punto di partenza per stabilire la connessione facendo clic sul verbo di connessione (possono scegliere anche 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 (o punti se sono presenti più). Gli utenti devono selezionare un punto di connessione del provider per creare una connessione.

Un ProviderConnectionPoint oggetto associa direttamente un controllo provider specifico e archivia i dettagli su una connessione nelle proprietà ereditate dalla classe base ConnectionPoint . Ad esempio, nella proprietà ereditata InterfaceType , un punto di connessione del provider mantiene il tipo di interfaccia restituito dal provider. Se il provider e il consumer in una connessione funzionano con lo stesso 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 oggetto per convertire il valore del InterfaceType punto di connessione del provider in un WebPartTransformer tipo con cui il consumer può funzionare. 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 del provider durante la creazione di connessioni. Il nome visualizzato è il parametro obbligatorio quando gli sviluppatori aggiungono un ConnectionProvider attributo al metodo di callback in un controllo provider. La proprietà ereditata è utile anche, come indicato in precedenza, perché fornisce un identificatore univoco ID per un punto di connessione del provider nel caso in cui un provider abbia più punti di connessione. Un provider può avere più ProviderConnectionPoint oggetti definiti in esso e in questo caso, quando gli sviluppatori aggiungono l'attributo ConnectionProvider a un metodo, devono specificare un valore ID per distinguere ogni punto di connessione. Un'altra proprietà ereditata importante è la AllowsMultipleConnections proprietà, che indica se un punto di connessione del provider può connettersi simultaneamente a più consumer. Questo valore della proprietà è true per impostazione predefinita per i punti di connessione del provider , mentre per impostazione predefinita false per i punti di connessione consumer.

La ProviderConnectionPoint classe aggiunge diversi metodi univoci ai membri ereditati dalla ConnectionPoint classe. Il GetObject metodo recupera un'istanza dell'interfaccia che il metodo di callback restituirà ai consumer. Il GetSecondaryInterfaces metodo recupera interfacce consumer aggiuntive che fanno parte di una connessione esistente, ma non sono le interfacce usate per stabilire la connessione.

Costruttori

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

Inizializza una nuova istanza della classe ProviderConnectionPoint.

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)
GetObject(Control)

Richiama il metodo di callback in un controllo provider che ottiene un'istanza di interfaccia da restituire ai consumer.

GetSecondaryInterfaces(Control)

Ottiene in insieme facoltativo di interfacce secondarie che possono essere supportate da un punto di connessione provider.

GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Si applica a

Vedi anche