ProviderConnectionPoint Classe

Définition

Définit un objet point de connexion qui active un contrôle serveur agissant en tant que fournisseur pour établir une connexion avec un consommateur.

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
Héritage
ProviderConnectionPoint

Exemples

L’exemple de code suivant montre des méthodes simples pour créer une connexion de manière déclarative, programmatique ou via l’interface utilisateur, en utilisant dans chaque cas un point de connexion de fournisseur.

L’exemple comporte quatre parties :

  • Contrôle utilisateur qui vous permet de modifier le mode d’affichage des composants WebPart sur une page.

  • Code source pour une interface et deux WebPart contrôles agissant en tant que fournisseur et consommateur pour une connexion.

  • Page Web pour héberger tous les contrôles et exécuter l’exemple de code.

  • Explication de l’exécution de l’exemple de page.

La première partie de cet exemple de code est le contrôle utilisateur qui permet aux utilisateurs de modifier les modes d’affichage sur une page Web. Enregistrez le code source suivant dans un fichier .ascx, en lui attribuant le nom de fichier affecté à l’attribut Src de la Register directive pour ce contrôle utilisateur, qui se trouve en haut de la page Web d’hébergement. Pour plus d’informations sur les modes d’affichage et une description du code source dans ce contrôle, consultez Procédure pas à pas : modification des modes d’affichage sur une page de composants WebPart.

<%@ 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 deuxième partie de l’exemple de code est le code source de l’interface et des contrôles. Le fichier source contient une interface simple nommée IZipCode. Il existe également une WebPart classe nommée ZipCodeWebPart qui implémente l’interface et joue le rôle de contrôle du fournisseur. Sa ProvideIZipCode méthode est la méthode de rappel qui implémente le seul membre de l’interface. La méthode retourne simplement une instance de l’interface. Notez que la méthode est marquée avec un ConnectionProvider attribut dans ses métadonnées. Il s’agit du mécanisme permettant d’identifier la méthode en tant que méthode de rappel pour le point de connexion du fournisseur. L’autre WebPart classe est nommée WeatherWebPartet joue le rôle de consommateur pour la connexion. Cette classe a une méthode nommée GetZipCode qui obtient un instance de l’interface IZipCode à partir du contrôle fournisseur. Notez que cette méthode est marquée comme méthode de point de connexion du consommateur avec un ConnectionConsumer attribut dans ses métadonnées. Il s’agit du mécanisme permettant d’identifier la méthode de point de connexion dans le contrôle consommateur.

Pour que l’exemple de code s’exécute, vous devez compiler ce code source. Vous pouvez le compiler explicitement et placer l’assembly résultant dans le dossier Bin de votre site web ou dans le Global Assembly Cache. Vous pouvez également placer le code source dans le dossier App_Code de votre site, où il sera compilé dynamiquement au moment de l’exécution. Cet exemple de code utilise la compilation dynamique. Pour obtenir une procédure pas à pas qui montre comment compiler, consultez Procédure pas à pas : développement et utilisation d’un contrôle serveur Web personnalisé.

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 troisième partie de l’exemple de code est la page Web. En haut se trouvent Register des directives pour inscrire les contrôles personnalisés qui forment la connexion et le contrôle utilisateur qui permet aux utilisateurs de modifier les modes d’affichage sur la page. La connexion elle-même est créée de manière déclarative dans l’élément <staticconnections> de la page. Cela montre une façon de créer une connexion : notez l’attribut ProviderConnectionPointID dans l’élément <asp:webpartconnection> . Vous pouvez également créer la connexion par programmation ; le code permettant d’effectuer cette opération se trouve dans la Button1_Click méthode . Dans ce cas, un ProviderConnectionPoint objet est créé, puis passé à une méthode qui crée la connexion réelle. Que la connexion soit créée de manière déclarative ou programmatique, les points de connexion doivent toujours être spécifiés pour le fournisseur et le consommateur. La Button2_Click méthode accède ConnectionPoint aux objets pour le fournisseur et le consommateur, et écrit certaines de leurs valeurs de propriété dans une étiquette dans la 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>

Après avoir chargé la page dans un navigateur, cliquez sur le bouton Détails du point de connexion . Des informations sur les points de connexion fournisseur et consommateur établis dans la connexion déclarative s’affichent. Ensuite, utilisez le contrôle déroulant Mode d’affichage pour basculer la page en mode connexion. Dans le menu verbes du contrôle ConsommateurWebPart code postal (représenté par une flèche vers le bas dans la barre de titre), cliquez sur le verbe connecter. L’interface utilisateur de connexion s’affiche, créée automatiquement par le <asp:connectionszone> contrôle déclaré dans la page. Il s’agit d’une autre façon de créer une connexion (via l’interface utilisateur), ainsi que les méthodes déclaratives et programmatiques décrites précédemment. Cliquez sur le bouton Déconnecter pour mettre fin à la connexion statique existante. Cliquez sur le lien Créer une connexion à un fournisseur . L’interface utilisateur affiche maintenant un contrôle déroulant qui répertorie le nom complet du point de connexion du fournisseur. Sélectionnez le point de connexion dans la liste déroulante, puis cliquez sur Se connecter pour terminer la connexion. Ensuite, cliquez à nouveau sur Déconnecter . Cliquez ensuite sur le bouton Connexion dynamique pour créer une connexion par programme. Utilisez le contrôle Mode d’affichage pour renvoyer la page en mode navigation. Cliquez à nouveau sur le bouton Détails du point de connexion pour indiquer une fois de plus des détails sur l’objet point de connexion du fournisseur.

L’exemple a démontré l’établissement d’une connexion et l’utilisation d’un point de connexion de fournisseur de trois manières : une connexion statique déclarée dans le balisage de page web ; une connexion créée dans le code qui utilisait un ProviderConnectionPoint objet ; et une connexion créée par un utilisateur via l’interface utilisateur de connexion.

Remarques

Dans chaque connexion de composants WebPart entre deux contrôles serveur, chaque contrôle doit avoir (entre autres exigences) un objet de point de connexion associé qui lui permet de se connecter à l’autre contrôle et de fournir ou de consommer des données, selon que le contrôle est désigné comme fournisseur ou consommateur pour la connexion. En général, ConnectionPoint un objet contient les détails de la façon dont un contrôle peut se connecter à un autre contrôle et le type de données qu’il peut partager. Pour un contrôle agissant en tant que fournisseur dans une connexion, son point de connexion doit être un ProviderConnectionPoint objet . Pour plus d’informations sur les connexions et les points de connexion des composants WebPart, consultez les rubriques répertoriées dans la section Voir aussi ci-dessous.

Pour créer un ProviderConnectionPoint objet, plusieurs étapes sont nécessaires :

  1. Créez une interface. Lorsqu’un fournisseur partage des données avec un consommateur, il obtient une instance d’une interface et retourne cette instance à un consommateur.

  2. Implémentez l’interface dans un fournisseur. Un WebPart ou un autre contrôle serveur (tout type de contrôle serveur dans une WebPartZoneBase zone peut être utilisé) qui sera le fournisseur doit implémenter l’interface créée à la première étape.

  3. Identifier une méthode de rappel. Une méthode dans le fournisseur doit être identifiée comme méthode de rappel pour établir une connexion. Cette méthode retourne un instance de l’interface implémentée à un consommateur. L’approche webPart permettant d’identifier une méthode de rappel dans le fournisseur consiste à ajouter un ConnectionProvider attribut de métadonnées (défini par la ConnectionProviderAttribute classe) à la méthode qui retourne l’interface instance. Lorsque l’attribut est ajouté, le seul paramètre requis est un nom d’affichage à utiliser pour le point de connexion du fournisseur. Des paramètres facultatifs peuvent également être ajoutés, tels qu’un ID pour le point de connexion.

Une fois qu’un contrôle a été équipé pour agir en tant que fournisseur, le contrôle peut participer à des connexions (en supposant qu’un contrôle consommateur est équipé et disponible de la même façon). Pour créer une connexion statique et déclarative dans le balisage d’une page Web, les développeurs peuvent utiliser l’élément <asp:webpartconnection> . Si l’attribut ConnectionProvider dans le code source du fournisseur qui identifie la méthode de rappel spécifie un ID pour le point de connexion, cette valeur doit être affectée à l’attribut ProviderConnectionPointID dans l’élément <asp:webpartconnection> d’une page. L’une des raisons pour lesquelles un développeur peut spécifier un ID pour un point de connexion de fournisseur est qu’il existe plusieurs points de connexion dans le contrôle fournisseur. Si aucun ID n’est spécifié pour le point de connexion du fournisseur dans le contrôle fournisseur, il n’est pas non plus obligatoire d’attribuer une valeur à l’attribut ProviderConnectionPointID dans la page, car la connexion sera créée à l’aide d’une valeur par défaut obtenue à partir du DefaultID champ .

Pour créer une connexion dans le code, les développeurs doivent créer un objet ProviderConnectionPoint en appelant la GetProviderConnectionPoints méthode et en lui transmettant l’ID du contrôle fournisseur, ainsi que l’ID ou l’index de l’objet défini ProviderConnectionPoint dans le contrôle fournisseur. L’objet retourné ProviderConnectionPoint , ainsi qu’une référence au contrôle fournisseur, une référence au contrôle consommateur et un objet correspondant ConsumerConnectionPoint , sont tous passés à la ConnectWebParts méthode pour créer un objet WebPartConnection .

Bien que les développeurs puissent utiliser des points de connexion de fournisseur dans le cadre de l’établissement de connexions de manière déclarative ou programmatique, les utilisateurs peuvent également interagir avec les points de connexion du fournisseur pour établir des connexions via l’interface utilisateur (IU). Si les développeurs déclarent un ConnectionsZone contrôle sur une page Web, il fournit une interface utilisateur d’exécution permettant aux utilisateurs de créer des connexions. Si les utilisateurs choisissent le contrôle consommateur comme point de départ pour établir la connexion en cliquant sur son verbe de connexion (ils peuvent également choisir le fournisseur ; il n’y a aucune différence dans la connexion résultante), dans l’interface utilisateur, ils verront un contrôle de liste déroulante avec le nom complet du point de connexion du fournisseur disponible (ou des points s’il y en a plusieurs). Les utilisateurs doivent sélectionner un point de connexion de fournisseur pour créer une connexion.

Un ProviderConnectionPoint objet s’associe directement à un contrôle fournisseur spécifique et stocke les détails d’une connexion dans les propriétés qu’il hérite de la classe de base ConnectionPoint . Par exemple, dans la propriété héritée InterfaceType , un point de connexion du fournisseur conserve le type d’interface retourné par le fournisseur. Si le fournisseur et le consommateur d’une connexion fonctionnent tous les deux avec le même type d’interface, les contrôles sont compatibles et capables de former une connexion directe. Si le fournisseur et le consommateur ne peuvent pas fonctionner avec le même type d’interface, ils sont incompatibles et doivent utiliser un WebPartTransformer objet pour traduire la valeur du point de connexion du InterfaceType fournisseur en un type avec lequel le consommateur peut travailler. Une autre propriété héritée importante est la DisplayName propriété, qui fournit un nom convivial à afficher dans l’interface utilisateur pour permettre aux utilisateurs de choisir un point de connexion de fournisseur lors de la création de connexions. Le nom d’affichage est le paramètre requis lorsque les développeurs ajoutent un ConnectionProvider attribut à la méthode de rappel dans un contrôle fournisseur. La propriété héritée ID est également utile, comme indiqué ci-dessus, car elle fournit un identificateur unique pour un point de connexion de fournisseur dans le cas où un fournisseur a plusieurs points de connexion. Un fournisseur peut avoir plusieurs ProviderConnectionPoint objets définis dans celui-ci, et dans ce cas, lorsque les développeurs ajoutent l’attribut ConnectionProvider à une méthode, ils doivent spécifier une valeur d’ID pour distinguer chaque point de connexion. Une autre propriété héritée notable est la AllowsMultipleConnections propriété, qui indique si un point de connexion de fournisseur peut se connecter simultanément à plusieurs consommateurs. Cette valeur de propriété est par défaut pour les points de connexion du fournisseur (alors qu’elle est true par défaut pour les points de false connexion du consommateur).

La ProviderConnectionPoint classe ajoute plusieurs méthodes uniques aux membres qu’elle hérite de la ConnectionPoint classe . La GetObject méthode récupère une instance de l’interface que la méthode de rappel retourne aux consommateurs. La GetSecondaryInterfaces méthode récupère des interfaces de consommateur supplémentaires qui font partie d’une connexion existante, mais qui ne sont pas les interfaces utilisées pour établir la connexion.

Constructeurs

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

Initialise une nouvelle instance de la classe ProviderConnectionPoint.

Propriétés

AllowsMultipleConnections

Obtient une valeur qui indique si un point de connexion prend en charge plusieurs connexions simultanées.

(Hérité de ConnectionPoint)
ControlType

Obtient le Type du contrôle serveur associé à un point de connexion.

(Hérité de ConnectionPoint)
DisplayName

Obtient une chaîne qui sert de nom complet convivial pour représenter un point de connexion dans l'interface utilisateur.

(Hérité de ConnectionPoint)
ID

Obtient une chaîne qui contient l'identificateur pour un point de connexion.

(Hérité de ConnectionPoint)
InterfaceType

Obtient le type de l'interface utilisée par un point de connexion.

(Hérité de ConnectionPoint)

Méthodes

Equals(Object)

Détermine si l'objet spécifié est égal à l'objet actuel.

(Hérité de Object)
GetEnabled(Control)

Retourne une valeur qui indique si un point de connexion peut participer aux connexions.

(Hérité de ConnectionPoint)
GetHashCode()

Fait office de fonction de hachage par défaut.

(Hérité de Object)
GetObject(Control)

Appelle la méthode de rappel dans un contrôle fournisseur qui obtient une instance d'interface à retourner aux consommateurs.

GetSecondaryInterfaces(Control)

Obtient une collection facultative d'interfaces secondaires qui peuvent être prises en charge par un point de connexion fournisseur.

GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
ToString()

Retourne une chaîne qui représente l'objet actuel.

(Hérité de Object)

S’applique à

Voir aussi