Partager via


ConsumerConnectionPoint Classe

Définition

Définit un objet de point de connexion qui active un contrôle serveur agissant comme un consommateur pour former une connexion avec un fournisseur.

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

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

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. 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 une 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 ConsumerConnectionPointID 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 ConsumerConnectionPoint 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 Fournisseur deWebPart 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 consommateur . L’interface utilisateur affiche maintenant un contrôle déroulant qui répertorie le nom complet du point de connexion du consommateur. 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 sur le bouton Connexion dynamique pour créer une connexion par programmation. 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 consommateur.

L’exemple a démontré l’établissement d’une connexion et l’utilisation d’un point de connexion consommateur 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 ConsumerConnectionPoint 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 consommateur dans une connexion, son point de connexion doit être un ConsumerConnectionPoint objet. Pour plus d’informations sur les connexions et les points de connexion des composants WebPart, lisez les rubriques répertoriées dans la section Voir aussi ci-dessous.

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

  1. Activer un contrôle consommateur pour référencer une instance d’interface. Un WebPart ou un autre contrôle serveur (tout type de contrôle serveur qui sera ajouté à une WebPartZoneBase zone peut être utilisé) doit être en mesure de consommer des données à partir d’une instance d’interface spécifique. Le contrôle n’a pas besoin d’implémenter l’interface ; seul le fournisseur doit l’implémenter. Le consommateur peut utiliser le type d’interface exact pris en charge par un fournisseur ou, si ce n’est pas le cas, un WebPartTransformer objet peut être utilisé pour transformer des données du type d’interface d’un fournisseur en un type compris par le consommateur. Un moyen classique d’activer un consommateur consiste à déclarer un champ privé pour contenir une référence au type d’interface souhaité.

  2. Identifier une méthode de rappel. Une méthode dans le consommateur doit être identifiée comme méthode de rappel pour établir une connexion avec le fournisseur. Cette méthode récupère une instance de l’interface que le fournisseur implémente et l’affecte à (par exemple) le champ privé créé à la première étape. L’approche webPart pour identifier une méthode de rappel dans le consommateur consiste à ajouter un ConnectionConsumer attribut de métadonnées (défini par la ConnectionConsumerAttribute classe) à la méthode qui reçoit l’instance d’interface. Lorsque l’attribut est ajouté, le seul paramètre requis est un nom complet à utiliser pour le point de connexion du consommateur. Des paramètres facultatifs peuvent également être ajoutés, tels qu’un ID.

  3. Traitez et extrayez les données à partir de l’instance d’interface. Effectuez tout traitement interne si nécessaire sur les données, puis généralement un contrôle consommateur restitue les données à la page. Une méthode courante consiste à remplacer la méthode du OnPreRender contrôle.

    Notes

    Pendant une demande synchrone, un consommateur doit demander des données directement au fournisseur pendant ou immédiatement après l’événement PreRender . Lors d’une demande asynchrone, si la méthode de rappel du fournisseur n’est pas appelée à aucun moment pendant le rendu, le développeur peut supposer qu’aucune donnée n’a été envoyée au consommateur.

Une fois qu’un contrôle a été équipé pour agir en tant que consommateur, le contrôle peut participer aux connexions (en supposant qu’un contrôle fournisseur est également équipé et disponible). 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 ConnectionConsumer dans le code source du consommateur qui identifie la méthode de rappel spécifie un ID pour le point de connexion, cette valeur doit être affectée à l’attribut dans l’élément ConsumerConnectionPointID<asp:webpartconnection> d’une page. Une raison pour laquelle un développeur peut spécifier un ID pour un point de connexion consommateur est si plusieurs points de connexion sont définis dans le contrôle consommateur. Si aucun ID n’est spécifié pour le point de connexion du consommateur dans le contrôle consommateur, il n’est pas non plus besoin d’attribuer une valeur à l’attribut ConsumerConnectionPointID 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 ConsumerConnectionPoint en appelant la GetConsumerConnectionPoints méthode et en lui transmettant l’ID du contrôle consommateur, ainsi que l’ID ou l’index de l’objet défini ConsumerConnectionPoint dans le contrôle consommateur. L’objet retourné ConsumerConnectionPoint , ainsi qu’une référence au contrôle consommateur, une référence au contrôle fournisseur et un objet correspondant ProviderConnectionPoint , 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 grand public 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 consommateur 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 fournisseur comme point de départ pour établir la connexion en cliquant sur son verbe de connexion (ils peuvent également choisir le consommateur ; 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 les noms complets du point de connexion consommateur disponible (ou des points s’il y en a plusieurs) auquel le fournisseur peut envoyer les données. Les utilisateurs doivent sélectionner un point de connexion consommateur pour établir une connexion.

Un ConsumerConnectionPoint objet s’associe directement à un contrôle consommateur 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 consommateur conserve le type d’interface qu’il utilise. Si le fournisseur et le consommateur d’une connexion comprennent le 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 propriété 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 consommateur lors de la création de connexions. Le nom d’affichage est le paramètre requis lorsque les développeurs ajoutent un ConnectionConsumer attribut à la méthode de rappel dans un contrôle consommateur. 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 consommateur dans le cas où un consommateur a plusieurs points de connexion. Un consommateur peut avoir plusieurs ConsumerConnectionPoint objets définis dans celui-ci, et dans ce cas, lorsque les développeurs ajoutent l’attribut ConnectionConsumer à 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 consommateur peut se connecter simultanément à plusieurs fournisseurs. Cette valeur de propriété est false par défaut pour les points de connexion du consommateur (alors qu’elle est définie par défaut sur pour les true points de connexion du fournisseur).

La ConsumerConnectionPoint classe ajoute plusieurs méthodes uniques aux membres qu’elle hérite de la ConnectionPoint classe . La SetObject méthode appelle la propre méthode de rappel définie du consommateur pour récupérer l’instance d’interface à partir du fournisseur. La SupportsConnection méthode retourne une valeur booléenne qui indique si le point de connexion est en mesure d’établir des connexions, en fonction de l’état actuel du contrôle consommateur associé.

Constructeurs

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

Initialise une nouvelle instance de la classe ConsumerConnectionPoint.

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

Appelle la méthode de rappel dans un contrôle consommateur et récupère l'instance d'interface d'un contrôle fournisseur.

SupportsConnection(Control, ConnectionInterfaceCollection)

Détermine si un point de connexion de consommateur est actuellement en mesure d'établir une connexion.

ToString()

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

(Hérité de Object)

S’applique à

Voir aussi