Sdílet prostřednictvím


ConsumerConnectionPoint Třída

Definice

Definuje objekt spojovacího bodu, který umožňuje, aby ovládací prvek serveru, který funguje jako příjemce, vytvořil připojení s poskytovatelem.

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
Dědičnost
ConsumerConnectionPoint

Příklady

Následující příklad kódu ukazuje jednoduché způsoby, jak vytvořit připojení deklarativní, programově nebo prostřednictvím uživatelského rozhraní, v každém případě použití spojovacího bodu příjemce.

Příklad má čtyři části:

  • Uživatelský ovládací prvek, který umožňuje změnit režim zobrazení webových částí na stránce.

  • Zdrojový kód pro rozhraní a dva WebPart ovládací prvky, které fungují jako zprostředkovatel a příjemce připojení.

  • Webová stránka pro hostování všech ovládacích prvků a spuštění příkladu kódu.

  • Vysvětlení způsobu spuštění ukázkové stránky

První část tohoto příkladu kódu je uživatelský ovládací prvek, který uživatelům umožňuje změnit režimy zobrazení na webové stránce. Uložte následující zdrojový kód do souboru .ascx a dejte mu název souboru, který je přiřazen Src atributu direktivy Register pro tento uživatelský ovládací prvek, který se nachází v horní části hostitelské webové stránky. Podrobnosti o režimech zobrazení a popis zdrojového kódu v tomto ovládacím prvku naleznete v návodu : Změna režimů zobrazení na stránce webových částí.

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

Druhou částí příkladu kódu je zdrojový kód pro rozhraní a ovládací prvky. Zdrojový soubor obsahuje jednoduché rozhraní s názvem IZipCode. Existuje také WebPart třída, ZipCodeWebPart která implementuje rozhraní a funguje jako zprostředkovatel řízení. Druhá WebPart třída je pojmenována WeatherWebParta funguje jako příjemce pro připojení. Tato třída má metodu s názvem GetZipCode , která získá instanci IZipCode rozhraní z ovládacího prvku zprostředkovatele. Všimněte si, že tato metoda je označena jako metoda spojovacího bodu příjemce s atributem ConnectionConsumer v jeho metadatech. Toto je mechanismus pro identifikaci metody spojovacího bodu v řízení příjemce.

Pro spuštění příkladu kódu je nutné zkompilovat tento zdrojový kód. Můžete jej explicitně zkompilovat a výsledné sestavení umístit do složky Bin vašeho webu nebo globální mezipaměti sestavení. Případně můžete zdrojový kód umístit do složky App_Code webu, kde se bude dynamicky kompilovat za běhu. Tento příklad kódu používá dynamickou kompilaci. Návod, který ukazuje, jak se zkompilovat, naleznete v části Návod: Vývoj a použití vlastního ovládacího prvku webového serveru.

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

Třetí částí příkladu kódu je webová stránka. V horní části jsou Register direktivy pro registraci vlastních ovládacích prvků, které tvoří připojení, a uživatelský ovládací prvek, který umožňuje uživatelům změnit režimy zobrazení na stránce. Samotné připojení se vytváří deklarativní v rámci <staticconnections> elementu na stránce. To ukazuje jeden způsob vytvoření connection --note ConsumerConnectionPointID atribut v elementu <asp:webpartconnection> . Připojení můžete vytvořit také prostřednictvím kódu programu; kód, který to dělá, je v Button1_Click metodě. V tomto případě ConsumerConnectionPoint se vytvoří objekt a pak se předá metodě, která vytvoří skutečné připojení. Bez ohledu na to, jestli se připojení vytváří deklarativním nebo programovým způsobem, musí být spojovací body vždy zadány pro zprostředkovatele i příjemce. Metoda Button2_Click přistupuje k ConnectionPoint objektům pro zprostředkovatele i příjemce a zapíše některé hodnoty jejich vlastností na popisek na stránce.

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

Po načtení stránky v prohlížeči klikněte na tlačítko Podrobnosti spojovacího bodu . Zobrazí se informace o zprostředkovateli a spojovacích bodech příjemců vytvořených v deklarativním připojení. Potom pomocí rozevíracího seznamu Režim zobrazení přepněte stránku do režimu připojení. V nabídce sloves ovládacího prvku ZprostředkovateleWebPart PSČ (reprezentované šipkou dolů v záhlaví) klikněte na příkaz připojit. Zobrazí se uživatelské rozhraní připojení vytvořené automaticky ovládacím prvku deklarovaným <asp:connectionszone> na stránce. Toto je další způsob vytvoření připojení (prostřednictvím uživatelského rozhraní) spolu s deklarativními a programovými metodami, které jsme probírali dříve. Kliknutím na tlačítko Odpojit ukončíte stávající statické připojení. Klikněte na odkaz Vytvořit připojení k příjemci . Uživatelské rozhraní teď zobrazuje rozevírací ovládací prvek, který obsahuje zobrazovaný název spojovacího bodu příjemce. V rozevíracím seznamu vyberte spojovací bod a dokončete připojení kliknutím na tlačítko Připojit . Potom znovu klikněte na Odpojit . Kliknutím na tlačítko Dynamické připojení vytvořte připojení prostřednictvím kódu programu. Pomocí ovládacího prvku Režim zobrazení se vrátí stránka do režimu procházení. Dalším kliknutím na tlačítko Podrobnosti spojovacího bodu označíte podrobnosti o objektu spojovacího bodu příjemce.

Příklad ukázal vytvoření připojení a použití spojovacího bodu příjemce třemi způsoby: statické připojení deklarované v kódu webové stránky; připojení vytvořené v kódu, které používalo ConsumerConnectionPoint objekt, a připojení vytvořené uživatelem prostřednictvím uživatelského rozhraní připojení.

Poznámky

V každém připojení webových částí mezi dvěma ovládacími prvky serveru musí mít každý ovládací prvek (mimo jiné požadavky) přidružený objekt spojovacího bodu, který umožňuje připojení k druhému ovládacímu prvku a poskytnutí nebo využívání dat v závislosti na tom, zda je ovládací prvek určen jako zprostředkovatel nebo příjemce připojení. Objekt ConnectionPoint obecně obsahuje podrobnosti o tom, jak se ovládací prvek může připojit k jinému ovládacímu prvku a typ dat, která může sdílet. U ovládacího prvku fungujícího jako příjemce v připojení musí být jeho spojovací bod objektem ConsumerConnectionPoint . Podrobnosti o připojeních webových částí a spojovacích bodech najdete v tématech uvedených v části Viz také níže.

K vytvoření objektu ConsumerConnectionPoint je potřeba provést několik kroků:

  1. Povolit řízení příjemce odkazovat na instanci rozhraní. Ovládací WebPart prvek nebo jiný serverový ovládací prvek (jakýkoli typ serverového ovládacího prvku, který bude přidán do WebPartZoneBase zóny, lze použít) musí být schopen využívat data z konkrétní instance rozhraní. Ovládací prvek nemusí implementovat rozhraní; pouze poskytovatel ho musí implementovat. Příjemce může pracovat s přesným typem rozhraní, který poskytovatel obsluhuje, nebo pokud ne, WebPartTransformer lze objekt použít k transformaci dat z typu rozhraní zprostředkovatele na typ, kterému příjemce rozumí. Typickým způsobem povolení příjemce je deklarovat privátní pole, které bude obsahovat odkaz na požadovaný typ rozhraní.

  2. Identifikujte metodu zpětného volání. Metoda v příjemci musí být identifikována jako metoda zpětného volání, aby bylo možné navázat spojení s poskytovatelem. Tato metoda načte instanci rozhraní, které zprostředkovatel implementuje, a přiřadí ho (například) privátnímu poli vytvořenému v prvním kroku. Přístup webových částí pro identifikaci metody zpětného volání v příjemci spočívá v přidání ConnectionConsumer atributu metadat (definovaného ConnectionConsumerAttribute třídou) do metody, která přijímá instanci rozhraní. Při přidání atributu je jediným povinným parametrem zobrazovaný název, který se použije pro spojovací bod příjemce. Volitelné parametry je také možné přidat, například ID.

  3. Zpracování a výstup dat z instance rozhraní Proveďte jakékoli interní zpracování podle potřeby na data a pak obvykle ovládací prvek příjemce vykreslí data na stránku. Běžným způsobem, jak to udělat, je přepsat metodu OnPreRender ovládacího prvku.

    Poznámka:

    Během synchronního požadavku by uživatel měl požadovat data přímo od poskytovatele během události nebo bezprostředně po ní PreRender . Pokud během asynchronního požadavku není metoda zpětného volání poskytovatele volána v žádném okamžiku během vykreslování, vývojář může předpokládat, že se příjemci neposílala žádná data.

Jakmile je ovládací prvek vybaven tak, aby fungoval jako spotřebitel, může se ovládací prvek účastnit připojení (za předpokladu, že je ovládací prvek poskytovatele také vybaven a k dispozici). K vytvoření statického deklarativního připojení v kódu webové stránky mohou vývojáři použít <asp:webpartconnection> prvek. ConnectionConsumer Pokud atribut ve zdrojovém kódu příjemce, který identifikuje metodu zpětného volání určuje ID spojovacího bodu, musí být tato hodnota přiřazena ConsumerConnectionPointID atributu <asp:webpartconnection> v prvku na stránce. Důvodem, proč může vývojář zadat ID pro spojovací bod příjemce, je, že existuje více spojovacích bodů definovaných v ovládacím prvku příjemce. Pokud není pro bod připojení příjemce v ovládacím prvku příjemce zadáno ID, není nutné k atributu na stránce přiřadit ConsumerConnectionPointID ani hodnotu, protože připojení se vytvoří pomocí výchozí hodnoty získané z DefaultID pole.

Aby vývojáři mohli vytvořit připojení v kódu, musí vytvořit nový ConsumerConnectionPoint objekt voláním GetConsumerConnectionPoints metody a předáním ID ovládacího prvku příjemce spolu s ID nebo indexem definovaného ConsumerConnectionPoint objektu v ovládacím prvku příjemce. ConsumerConnectionPoint Vrácený objekt spolu s odkazem na ovládací prvek příjemce, odkaz na ovládací prvek zprostředkovatele a odpovídající ProviderConnectionPoint objekt jsou předány ConnectWebParts metodě pro vytvoření nového WebPartConnection objektu.

I když vývojáři můžou jako součást navazování připojení používat body připojení uživatelů buď deklarativní, nebo programově, můžou uživatelé také interagovat s body připojení uživatelů k navázání připojení prostřednictvím uživatelského rozhraní (UI). Pokud vývojáři deklarují ConnectionsZone ovládací prvek na webové stránce, poskytuje uživatelům uživatelské rozhraní za běhu pro vytváření připojení. Pokud uživatelé zvolí ovládací prvek zprostředkovatele jako výchozí bod pro navázání připojení kliknutím na jeho příkaz pro připojení (můžou také zvolit příjemce; výsledné připojení není žádný rozdíl), v uživatelském rozhraní uvidí ovládací prvek rozevíracího seznamu s zobrazovanými názvy dostupného spojovacího bodu příjemce (nebo bodů, pokud existuje více), do kterého může poskytovatel odesílat data. Uživatelé musí vybrat spojovací bod příjemce pro navázání připojení.

ConsumerConnectionPoint Objekt přidruží přímo ke konkrétnímu ovládacímu prvku příjemce a uloží podrobnosti o připojení ve vlastnostech, které dědí ze základní ConnectionPoint třídy. Například v zděděné InterfaceType vlastnosti spojovací bod příjemce udržuje typ rozhraní, které používá. Pokud poskytovatel i příjemce připojení chápou typ rozhraní, jsou ovládací prvky kompatibilní a schopné vytvořit přímé připojení. Pokud poskytovatel a příjemce nemohou pracovat se stejným typem rozhraní, jsou nekompatibilní a musí použít WebPartTransformer objekt k překladu vlastnosti spojovacího InterfaceType bodu zprostředkovatele do typu, se kterým může příjemce pracovat. Další důležitou zděděnou vlastností je DisplayName vlastnost, která poskytuje popisný název, který se zobrazí v uživatelském rozhraní, aby uživatelé při vytváření připojení zvolili spojovací bod příjemce. Zobrazovaný název je povinný parametr, když vývojáři přidají ConnectionConsumer atribut do metody zpětného volání v ovládacím prvku příjemce. Zděděná ID vlastnost je také užitečná, jak je uvedeno výše, protože poskytuje jedinečný identifikátor pro spojovací bod příjemce v případě, že příjemce má více spojovacích bodů. Příjemce může mít v něm definovaných více ConsumerConnectionPoint objektů a v tomto případě, když vývojáři přidají ConnectionConsumer atribut do metody, měli by zadat hodnotu ID pro rozlišení každého spojovacího bodu. Jedna další zděděná vlastnost je AllowsMultipleConnections vlastnost, která označuje, zda se spojovací bod příjemce může připojit současně k více zprostředkovatelům. Tato hodnota vlastnosti je false ve výchozím nastavení pro body připojení příjemce (zatímco výchozí hodnota true je pro spojovací body zprostředkovatele).

Třída ConsumerConnectionPoint přidá do členů několik jedinečných metod, které dědí z ConnectionPoint třídy. Metoda SetObject vyvolá vlastní definovanou metodu zpětného volání příjemce, která načte instanci rozhraní od zprostředkovatele. Metoda SupportsConnection vrátí logickou hodnotu, která označuje, zda je spojovací bod schopen navázat připojení na základě aktuálního stavu přidruženého řízení příjemce.

Konstruktory

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

Inicializuje novou instanci ConsumerConnectionPoint třídy.

Vlastnosti

Name Description
AllowsMultipleConnections

Získá hodnotu, která označuje, zda spojovací bod podporuje více souběžných připojení.

(Zděděno od ConnectionPoint)
ControlType

Type Získá serverový ovládací prvek, ke kterému je přidružen spojovací bod.

(Zděděno od ConnectionPoint)
DisplayName

Získá řetězec, který slouží jako popisný zobrazovaný název pro reprezentaci spojovacího bodu v uživatelském rozhraní (UI).

(Zděděno od ConnectionPoint)
ID

Získá řetězec, který obsahuje identifikátor pro spojovací bod.

(Zděděno od ConnectionPoint)
InterfaceType

Získá typ rozhraní používaného spojovacím bodem.

(Zděděno od ConnectionPoint)

Metody

Name Description
Equals(Object)

Určuje, zda je zadaný objekt roven aktuálnímu objektu.

(Zděděno od Object)
GetEnabled(Control)

Vrátí hodnotu, která určuje, zda se spojovací bod může účastnit připojení.

(Zděděno od ConnectionPoint)
GetHashCode()

Slouží jako výchozí funkce hash.

(Zděděno od Object)
GetType()

Získá Type aktuální instance.

(Zděděno od Object)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Object.

(Zděděno od Object)
SetObject(Control, Object)

Vyvolá metodu zpětného volání v ovládacím prvku příjemce a načte instanci rozhraní z ovládacího prvku zprostředkovatele.

SupportsConnection(Control, ConnectionInterfaceCollection)

Určuje, jestli je spojovací bod příjemce aktuálně schopný navázat připojení.

ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Platí pro

Viz také