ConsumerConnectionPoint Klas

Definitie

Hiermee definieert u een verbindingspuntobject waarmee een serverbesturingselement dat fungeert als consument een verbinding met een provider kan vormen.

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
Overname
ConsumerConnectionPoint

Voorbeelden

In het volgende codevoorbeeld ziet u eenvoudige manieren om een verbinding declaratief, programmatisch of via de gebruikersinterface te maken, in elk geval door gebruik te maken van een consumentenverbindingspunt.

Het voorbeeld heeft vier delen:

  • Een gebruikersbeheer waarmee u de weergavemodus voor webonderdelen op een pagina kunt wijzigen.

  • Broncode voor een interface en twee WebPart besturingselementen die fungeren als de provider en de consument voor een verbinding.

  • Een webpagina om alle besturingselementen te hosten en het codevoorbeeld uit te voeren.

  • Een uitleg over het uitvoeren van de voorbeeldpagina.

Het eerste deel van dit codevoorbeeld is het gebruikersbeheer waarmee gebruikers weergavemodi op een webpagina kunnen wijzigen. Sla de volgende broncode op in een .ascx-bestand, waardoor het de bestandsnaam krijgt die is toegewezen aan het Src kenmerk van de Register instructie voor dit gebruikersbeheer, dat zich boven aan de hostingwebpagina bevindt. Zie Overzicht: Weergavemodi wijzigen op een pagina met webonderdelen voor meer informatie over weergavemodi en een beschrijving van de broncode in dit besturingselement.

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

Het tweede deel van het codevoorbeeld is de broncode voor de interface en besturingselementen. Het bronbestand bevat een eenvoudige interface met de naam IZipCode. Er is ook een klasse met de WebPart naam ZipCodeWebPart die de interface implementeert en fungeert als het providerbeheer. De andere WebPart klasse heeft de naam WeatherWebParten fungeert als de consument voor de verbinding. Deze klasse heeft een methode met de naam GetZipCode die een exemplaar van de IZipCode interface ophaalt uit het besturingselement van de provider. Houd er rekening mee dat deze methode is gemarkeerd als de verbindingspuntmethode van de consument met een ConnectionConsumer kenmerk in de metagegevens. Dit is het mechanisme voor het identificeren van de verbindingspuntmethode in het consumentenbeheer.

Als u het codevoorbeeld wilt uitvoeren, moet u deze broncode compileren. U kunt deze expliciet compileren en de resulterende assembly in de map Bin van uw website of de globale assemblycache plaatsen. U kunt de broncode ook in de map App_Code van uw site plaatsen, waar deze dynamisch wordt gecompileerd tijdens runtime. In dit codevoorbeeld wordt dynamische compilatie gebruikt. Zie Walkthrough: Een aangepast webserverbeheer ontwikkelen en gebruiken voor een overzicht van hoe u compileert.

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

Het derde deel van het codevoorbeeld is de webpagina. Bovenaan staan Register instructies voor het registreren van de aangepaste besturingselementen die de verbinding vormen en het gebruikersbesturingselement waarmee gebruikers weergavemodi op de pagina kunnen wijzigen. De verbinding zelf wordt declaratief gemaakt binnen het <staticconnections> element op de pagina. Dit demonstreert een manier om een verbinding te maken. Noteer het ConsumerConnectionPointID kenmerk in het <asp:webpartconnection> element. U kunt de verbinding ook programmatisch maken; de code hiervoor bevindt zich in de Button1_Click methode. In dit geval wordt een ConsumerConnectionPoint object gemaakt en vervolgens doorgegeven aan een methode waarmee de werkelijke verbinding wordt gemaakt. Ongeacht of de verbinding declaratief of programmatisch wordt gemaakt, moeten verbindingspunten altijd worden opgegeven voor zowel de provider als de consument. De Button2_Click methode opent de ConnectionPoint objecten voor zowel de provider als de consument en schrijft enkele eigenschapswaarden naar een label op de 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>

Nadat u de pagina in een browser hebt geladen, klikt u op de knop Details van verbindingspunt . Informatie over de provider- en consumentenaansluitpunten die in de declaratieve verbinding tot stand zijn gebracht, wordt weergegeven. Gebruik vervolgens het vervolgkeuzemenu Weergavemodus om de pagina over te schakelen naar de verbindingsmodus. Klik in het menu Werkwoorden van het besturingselement PostcodeproviderWebPart (vertegenwoordigd door een pijl-omlaag in de titelbalk) op het verbindingswerkwoord. De verbindingsgebruikersinterface wordt automatisch gemaakt door het <asp:connectionszone> besturingselement dat op de pagina is gedeclareerd. Dit is een andere manier om een verbinding te maken (via de gebruikersinterface), samen met de declaratieve en programmatische methoden die eerder zijn besproken. Klik op de knop Verbinding verbreken om de bestaande statische verbinding te beëindigen. Klik op de koppeling Een verbinding met een consument maken . In de gebruikersinterface wordt nu een vervolgkeuzelijst weergegeven met de weergavenaam van het consumentenaansluitpunt. Selecteer het verbindingspunt in de vervolgkeuzelijst en klik vervolgens op Verbinding maken om de verbinding te voltooien. Klik vervolgens nogmaals op Verbinding verbreken . Klik op de knop Dynamische verbinding om programmatisch een verbinding te maken. Gebruik het besturingselement Weergavemodus om de pagina te retourneren om door de bladermodus te bladeren. Klik nogmaals op de knop Details van verbindingspunt om details over het verbindingspuntobject van de consument weer aan te geven.

In het voorbeeld is aangetoond dat een verbinding tot stand is gebracht en op drie manieren een consumentenaansluitpunt wordt gebruikt: een statische verbinding die is gedeclareerd in de webpaginamarkeringen; een verbinding die is gemaakt in code die gebruikmaakt van een ConsumerConnectionPoint object en een verbinding die door een gebruiker is gemaakt via de gebruikersinterface van de verbinding.

Opmerkingen

In elke webonderdelenverbinding tussen twee serverbesturingselementen moet elk besturingselement (onder andere vereisten) een gekoppeld verbindingspuntobject hebben waarmee het verbinding kan maken met het andere besturingselement en gegevens kan leveren of gebruiken, afhankelijk van of het besturingselement is aangewezen als de provider of consument voor de verbinding. Een ConnectionPoint object bevat in het algemeen de details over hoe een besturingselement verbinding kan maken met een ander besturingselement en het type gegevens dat het kan delen. Voor een besturingselement dat als consument in een verbinding fungeert, moet het bijbehorende verbindingspunt een ConsumerConnectionPoint object zijn. Lees de onderwerpen in de sectie Zie ook hieronder voor meer informatie over verbindingen met webonderdelen en verbindingspunten.

Als u een ConsumerConnectionPoint object wilt maken, zijn er verschillende stappen vereist:

  1. Schakel een consumentenbeheer in om te verwijzen naar een interface-exemplaar. Een WebPart of ander serverbeheer (elk type serverbeheer dat wordt toegevoegd aan een WebPartZoneBase zone kan worden gebruikt) moet gegevens van een specifiek interface-exemplaar kunnen gebruiken. Het besturingselement hoeft de interface niet te implementeren; alleen de provider moet deze implementeren. De consument kan werken met het exacte interfacetype van een provider of, als dat niet het geval is, kan een WebPartTransformer object worden gebruikt om gegevens van het interfacetype van een provider te transformeren naar een type dat door de consument wordt begrepen. Een typische manier om een consument in staat te stellen een privéveld te declareren om een verwijzing naar het gewenste interfacetype te bevatten.

  2. Een callback-methode identificeren. Een methode in de consument moet worden geïdentificeerd als de callback-methode om een verbinding met de provider tot stand te brengen. Met deze methode wordt een exemplaar opgehaald van de interface die de provider implementeert en wordt deze toegewezen aan (bijvoorbeeld) het privéveld dat in de eerste stap is gemaakt. De benadering van webonderdelen voor het identificeren van een callback-methode in de consument is het toevoegen van een ConnectionConsumer metagegevenskenmerk (gedefinieerd door de ConnectionConsumerAttribute klasse) aan de methode die het interface-exemplaar ontvangt. Wanneer het kenmerk wordt toegevoegd, is de enige vereiste parameter een weergavenaam die moet worden gebruikt voor het verbindingspunt van de consument. Optionele parameters kunnen ook worden toegevoegd, zoals een id.

  3. De gegevens van het interface-exemplaar verwerken en uitvoeren. Voer indien nodig interne verwerking uit op de gegevens en vervolgens worden de gegevens meestal door een consumentenbeheer weergegeven op de pagina. Dit doet u vaak door de methode van OnPreRender het besturingselement te overschrijven.

    Note

    Tijdens een synchrone aanvraag moet een consument gegevens rechtstreeks van de provider aanvragen tijdens of direct na de PreRender gebeurtenis. Als tijdens een asynchrone aanvraag de callbackmethode van de provider niet op enig moment wordt aangeroepen tijdens het weergeven, kan de ontwikkelaar ervan uitgaan dat er geen gegevens naar de consument zijn verzonden.

Nadat een controle is uitgerust om als consument te fungeren, kan het besturingselement deelnemen aan verbindingen (ervan uitgaande dat een providercontrole ook is uitgerust en beschikbaar is). Ontwikkelaars kunnen het <asp:webpartconnection> element gebruiken om een statische, declaratieve verbinding te maken in de markering van een webpagina. Als het ConnectionConsumer kenmerk in de broncode van de consument waarmee de callback-methode wordt geïdentificeerd een id voor het verbindingspunt opgeeft, moet die waarde worden toegewezen aan het ConsumerConnectionPointID kenmerk in het <asp:webpartconnection> element op een pagina. Een reden waarom een ontwikkelaar een id voor een consumentenaansluitpunt kan opgeven, is als er meerdere verbindingspunten zijn gedefinieerd in het consumentenbeheer. Als er geen id is opgegeven voor het verbindingspunt van de consument in het besturingselement voor consumenten, hoeft ook geen waarde te worden toegewezen aan het ConsumerConnectionPointID kenmerk op de pagina, omdat de verbinding wordt gemaakt met een standaardwaarde die is verkregen uit het DefaultID veld.

Om een verbinding in code te maken, moeten ontwikkelaars een nieuw ConsumerConnectionPoint object maken door de GetConsumerConnectionPoints methode aan te roepen en de id van het consumentenbeheer door te geven, samen met de id of index van het gedefinieerde ConsumerConnectionPoint object in het consumentenbeheer. Het geretourneerde ConsumerConnectionPoint object, samen met een verwijzing naar het consumentenbesturingselement, een verwijzing naar het besturingselement provider en een bijbehorend ProviderConnectionPoint object, worden allemaal doorgegeven aan de ConnectWebParts methode om een nieuw WebPartConnection object te maken.

Hoewel ontwikkelaars consumentenaansluitpunten kunnen gebruiken als onderdeel van het maken van verbindingen declaratief of programmatisch, kunnen gebruikers ook communiceren met consumentenaansluitpunten om verbindingen tot stand te brengen via de gebruikersinterface (UI). Als ontwikkelaars een ConnectionsZone besturingselement declareren op een webpagina, biedt het een runtime-gebruikersinterface voor gebruikers om verbindingen te maken. Als gebruikers het providerbesturingselement kiezen als uitgangspunt voor het tot stand brengen van de verbinding door op de verbindingswoord te klikken (ze kunnen ook de consument kiezen; er is geen verschil in de resulterende verbinding), zien ze in de gebruikersinterface een vervolgkeuzelijst met de weergavenamen van het beschikbare consumentenverbindingspunt (of punten als er meerdere zijn) waarnaar de provider de gegevens kan verzenden. Gebruikers moeten een consumentenaansluitpunt selecteren om een verbinding tot stand te brengen.

Een ConsumerConnectionPoint object wordt rechtstreeks gekoppeld aan een specifiek consumentenbeheer en slaat details op over een verbinding in de eigenschappen die het over neemt van de basisklasse ConnectionPoint . In de overgenomen InterfaceType eigenschap houdt een consumentenaansluitpunt bijvoorbeeld het type interface bij dat wordt gebruikt. Als de provider en de consument in een verbinding het interfacetype begrijpen, zijn de besturingselementen compatibel en kunnen ze een directe verbinding vormen. Als de provider en consument niet met hetzelfde interfacetype kunnen werken, zijn ze niet compatibel en moeten ze een WebPartTransformer object gebruiken om de eigenschap van InterfaceType het providerverbindingspunt te vertalen in een type waarmee de consument kan werken. Een andere belangrijke overgenomen eigenschap is de DisplayName eigenschap, die een beschrijvende naam biedt die in de gebruikersinterface wordt weergegeven, zodat gebruikers een consumentenaansluitpunt kunnen kiezen bij het maken van verbindingen. De weergavenaam is de vereiste parameter wanneer ontwikkelaars een ConnectionConsumer kenmerk toevoegen aan de callback-methode in een consumentenbeheer. De overgenomen ID eigenschap is ook handig, zoals hierboven aangegeven, omdat deze een unieke id biedt voor een consumentenaansluitpunt in het geval dat een consument meerdere verbindingspunten heeft. Een consument kan meerdere ConsumerConnectionPoint objecten bevatten die erin zijn gedefinieerd. In dit geval moeten ontwikkelaars, wanneer ontwikkelaars het ConnectionConsumer kenmerk toevoegen aan een methode, een id-waarde opgeven om elk verbindingspunt te onderscheiden. Een andere belangrijke overgenomen eigenschap is de AllowsMultipleConnections eigenschap, die aangeeft of een consumentenaansluitpunt gelijktijdig verbinding kan maken met meerdere providers. Deze eigenschapswaarde is false standaard bedoeld voor consumentenverbindingspunten (terwijl deze standaard geldt voor providerverbindingspunten true ).

De ConsumerConnectionPoint klasse voegt verschillende unieke methoden toe aan de leden die worden overgenomen van de ConnectionPoint klasse. Met SetObject de methode wordt de eigen gedefinieerde callbackmethode van de consument aangeroepen om het interface-exemplaar van de provider op te halen. De SupportsConnection methode retourneert een Booleaanse waarde die aangeeft of het verbindingspunt verbindingen kan tot stand brengen, op basis van de huidige status van het gekoppelde consumentenbeheer.

Constructors

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

Initialiseert een nieuw exemplaar van de ConsumerConnectionPoint klasse.

Eigenschappen

Name Description
AllowsMultipleConnections

Hiermee wordt een waarde opgehaald die aangeeft of een verbindingspunt meerdere gelijktijdige verbindingen ondersteunt.

(Overgenomen van ConnectionPoint)
ControlType

Hiermee haalt u het Type serverbeheer op waarmee een verbindingspunt is gekoppeld.

(Overgenomen van ConnectionPoint)
DisplayName

Hiermee haalt u een tekenreeks op die fungeert als een beschrijvende weergavenaam die een verbindingspunt in de gebruikersinterface (UI) vertegenwoordigt.

(Overgenomen van ConnectionPoint)
ID

Hiermee haalt u een tekenreeks op die de id voor een verbindingspunt bevat.

(Overgenomen van ConnectionPoint)
InterfaceType

Hiermee haalt u het type van de interface op dat wordt gebruikt door een verbindingspunt.

(Overgenomen van ConnectionPoint)

Methoden

Name Description
Equals(Object)

Bepaalt of het opgegeven object gelijk is aan het huidige object.

(Overgenomen van Object)
GetEnabled(Control)

Retourneert een waarde die aangeeft of een verbindingspunt kan deelnemen aan verbindingen.

(Overgenomen van ConnectionPoint)
GetHashCode()

Fungeert als de standaardhashfunctie.

(Overgenomen van Object)
GetType()

Hiermee haalt u de Type huidige instantie op.

(Overgenomen van Object)
MemberwiseClone()

Hiermee maakt u een ondiepe kopie van de huidige Object.

(Overgenomen van Object)
SetObject(Control, Object)

Roept de callback-methode aan in een consumentenbeheer en haalt het interface-exemplaar op uit een providerbeheer.

SupportsConnection(Control, ConnectionInterfaceCollection)

Hiermee bepaalt u of een consumentenaansluitpunt momenteel in staat is een verbinding tot stand te brengen.

ToString()

Retourneert een tekenreeks die het huidige object vertegenwoordigt.

(Overgenomen van Object)

Van toepassing op

Zie ook