ConnectionPoint ConnectionPoint ConnectionPoint ConnectionPoint Class

Определение

Служит в качестве базового класса для определения объектов точек подключения, которые позволяют элементу управления получателя и элементу управления поставщика в связи веб-частей обмениваться данными.Serves as the base class for defining connection point objects that enable the consumer control and the provider control in a Web Parts connection to share data.

public ref class ConnectionPoint abstract
public abstract class ConnectionPoint
type ConnectionPoint = class
Public MustInherit Class ConnectionPoint
Наследование
ConnectionPointConnectionPointConnectionPointConnectionPoint
Производный

Примеры

В следующем примере кода показано создание веб-части соединения, включающего необходимые ConnectionPoint объекты.The following code example demonstrates the creation of a Web Parts connection that includes the required ConnectionPoint objects. Поскольку класс является абстрактным базовым классом, экземплярами его дочерних классовProviderConnectionPoint ConsumerConnectionPointявляются фактические объекты, используемые для создания соединения. ConnectionPointBecause the ConnectionPoint class is an abstract base class, instances of its child classes--ProviderConnectionPoint and ConsumerConnectionPoint--are the actual objects used to form a connection.

Пример состоит из четырех частей:The example has four parts:

  • Пользовательский элемент управления, позволяющий изменять режим просмотра веб-части на странице.A user control that enables you to change the Web Parts display mode on a page.

  • Исходный код для интерфейса и два WebPart элемента управления, выступающих в качестве поставщика и потребителя для соединения.Source code for an interface and two WebPart controls acting as the provider and the consumer for a connection.

  • Веб-страница для размещения всех элементов управления и выполнения примера кода.A Web page to host all the controls and run the code example.

  • Объяснение того, как запустить пример страницы.An explanation of how to run the example page.

Первая часть этого примера кода — это пользовательский элемент управления, позволяющий пользователям изменять режимы экрана на веб-странице.The first part of this code example is the user control that enables users to change display modes on a Web page. Сохраните следующий исходный код в ASCX-файл и присвойте ему имя файла, присвоенное Src атрибуту Register директивы для этого пользовательского элемента управления, который находится ближе к верхней части страницы размещения.Save the following source code to an .ascx file, giving it the file name that is assigned to the Src attribute of the Register directive for this user control, which is near the top of the hosting Web page. Дополнительные сведения о режимах вывода и описание исходного кода в этом элементе управления см. в разделе Пошаговое руководство. Изменение режима экрана на веб-части странице.For details about display modes and a description of the source code in this control, see Walkthrough: Changing Display Modes on a Web Parts Page.

<%@ 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="&nbsp;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="&nbsp;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>

Вторая часть примера кода — это исходный код для интерфейса и элементов управления.The second part of the code example is the source code for the interface and controls. Исходный файл содержит простой интерфейс с именем IZipCode.The source file contains a simple interface named IZipCode. Также WebPart существует класс с именем ZipCodeWebPart , который реализует интерфейс и выступает в качестве элемента управления поставщика.There is also a WebPart class named ZipCodeWebPart that implements the interface and acts as the provider control. Его ProvideIZipCode метод — это метод обратного вызова, реализующий член интерфейса.Its ProvideIZipCode method is the callback method that implements the interface's only member. Метод просто возвращает экземпляр интерфейса.The method simply returns an instance of the interface. Обратите внимание, что метод помечен ConnectionProvider атрибутом в его метаданных.Note that the method is marked with a ConnectionProvider attribute in its metadata. Это механизм идентификации метода в качестве метода обратного вызова для точки соединения поставщика.This is the mechanism for identifying the method as the callback method for the provider's connection point. Другой WebPart классWeatherWebPartназывается, и он выступает в качестве потребителя для соединения.The other WebPart class is named WeatherWebPart, and it acts as the consumer for the connection. Этот класс имеет метод с именем GetZipCode , который получает экземпляр IZipCode интерфейса из элемента управления поставщика.This class has a method named GetZipCode that gets an instance of the IZipCode interface from the provider control. Обратите внимание, что этот метод помечен как метод точки подключения потребителя с ConnectionConsumer атрибутом в его метаданных.Note that this method is marked as the consumer's connection point method with a ConnectionConsumer attribute in its metadata. Это механизм идентификации метода точки подключения в элементе управления потребителя.This is the mechanism for identifying the connection point method in the consumer control.

Для выполнения примера кода необходимо скомпилировать этот исходный код.For the code example to run, you must compile this source code. Его можно скомпилировать явным образом и разместить полученную сборку в папке Bin веб-сайта или в глобальном кэше сборок.You can compile it explicitly and put the resulting assembly in your Web site's Bin folder or the global assembly cache. Кроме того, можно разместить исходный код в папке App_Code сайта, где он будет динамически компилироваться во время выполнения.Alternatively, you can put the source code in your site's App_Code folder, where it will be dynamically compiled at run time. В этом примере кода используется динамическая компиляция.This code example uses dynamic compilation. Пошаговое руководство, в котором демонстрируется компиляция , см. в разделе Пошаговое руководство. Разработка и использование пользовательского серверного веб-элемента управления.For a walkthrough that demonstrates how to compile, see Walkthrough: Developing and Using a Custom Web Server Control.

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

Третья часть примера кода — веб-страница.The third part of the code example is the Web page. В верхней части приведены Register директивы для регистрации пользовательских элементов управления, образующих соединение, и пользовательского элемента управления, который позволяет пользователям изменять режимы экрана на странице.Near the top are Register directives to register the custom controls that form the connection, and the user control that enables users to change display modes on the page. Само соединение создается декларативно в <staticconnections> элементе на странице.The connection itself is created declaratively within the <staticconnections> element on the page. Можно также создать подключение программным способом. код для выполнения этой операции содержится в Button1_Click методе.You can also create the connection programmatically; the code for doing that is contained in the Button1_Click method. Независимо от того, создается ли соединение декларативно или программно, точки соединения всегда должны быть указаны как для поставщика, так и для потребителя.Whether the connection is created declaratively or programmatically, connection points must always be specified for both the provider and the consumer. Метод обращается к ConnectionPoint объектам как для поставщика, так и для потребителя и записывает некоторые значения их свойств в метку на странице. Button2_ClickThe Button2_Click method accesses the ConnectionPoint objects for both the provider and the consumer, and writes some of their property values to a label in the 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>

После загрузки страницы в браузере нажмите кнопку сведения о точке соединения .After you load the page in a browser, click the Connection Point Details button. Отобразятся сведения о точках подключения поставщика и потребителя, установленных в декларативном соединении.Information about the provider and consumer connection points established in the declarative connection appears. Затем с помощью раскрывающегося списка режим экрана переключите страницу в режим подключения.Next, use the Display Mode drop-down control to switch the page into connect mode. В меню команд одного из WebPart элементов управления (представленной стрелкой вниз в заголовке окна) щелкните команду Подключить.On the verbs menu of one of the WebPart controls (represented by a downward arrow in the title bar), click the connect verb. Открывается пользовательский интерфейс подключения, который <asp:connectionszone> автоматически создается элементом управления, объявленным на странице.The connection UI appears, created automatically by the <asp:connectionszone> control declared in the page. Нажмите кнопку Disconnect (отключить ), чтобы завершить существующее подключение.Click the Disconnect button to terminate the existing connection. Используйте элемент управления " режим отображения ", чтобы вернуть страницу в режим просмотра.Use the Display Mode control to return the page to browse mode. Затем нажмите кнопку Динамическое соединение , чтобы создать подключение программным способом.Next, click the Dynamic Connection button to create a connection programmatically. Снова нажмите кнопку сведения о точке соединения , чтобы указать сведения о двух объектах точек соединения.Click the Connection Point Details button again, to indicate details about the two connection point objects.

Комментарии

Каждое подключение веб-части состоит из двух серверных элементов управления, совместно использующих данные: один элемент управления является потребителем, второй — поставщиком.Every Web Parts connection consists of two server controls sharing data: one control is the consumer, the other is the provider. Описание необходимых компонентов подключения веб-части и самого объекта подключения см. в WebPartConnection разделе Общие сведения о классе.For a discussion of the essential components of a Web Parts connection, and the connection object itself, see the WebPartConnection class overview. Для каждого подключения веб-части требуются точки подключения.Every Web Parts connection requires connection points. У поставщика и элемента управления получателя должен быть по крайней мере один ConnectionPoint определенный объект (каждый из них может иметь несколько точек подключения), содержащий сведения о том, как элемент управления может подключаться к другому элементу управления и к типу данных, к которым он может предоставлять общий доступ.The provider and the consumer control must each have at least one defined ConnectionPoint object (each of them can optionally have multiple connection points) that contains the details for how a control can connect to another control and the type of data it can share. В фактическом соединении поставщик имеет собственный тип объекта точки подключения (производный от базового ConnectionPoint класса) ProviderConnectionPoint , экземпляр, а потребитель имеет собственный объект — ConsumerConnectionPoint экземпляр.In an actual connection, the provider has its own type of connection point object (derived from the base ConnectionPoint class), a ProviderConnectionPoint instance, and the consumer has its own object, a ConsumerConnectionPoint instance.

Чтобы создать точку подключения поставщика, разработчики должны добавить метод обратного вызова к поставщику, который будет возвращать экземпляр реализованного интерфейса потребителю.To create a provider connection point, developers must add a callback method to the provider that will return an implemented interface instance to a consumer. Они должны помечать метод обратного вызова в исходном коде ConnectionProvider атрибутом кода ( ConnectionProviderAttribute см. класс).They must mark the callback method in the source code with a ConnectionProvider code attribute (see the ConnectionProviderAttribute class). Аналогично, чтобы создать точку подключения потребителя, разработчики должны добавить метод к потребителю, который получает экземпляр интерфейса, и он должен помечать этот метод ConnectionConsumer атрибутом ( ConnectionConsumerAttribute см. класс).Similarly, to create a consumer connection point, developers must add a method to the consumer that receives an interface instance, and they must mark that method with a ConnectionConsumer attribute (see the ConnectionConsumerAttribute class).

Когда разработчики создают подключения на веб-странице, их можно создавать как статические или динамические соединения.When developers create connections on a Web page, they can be created as static or dynamic connections. Статические соединения объявляются в разметке веб-страницы.Static connections are declared in the markup of a Web page. При объявлении статического соединения разработчики могут указать, какие точки соединения используются как для потребителя, так и для поставщика, назначив значения ProviderConnectionPointID атрибутам и ConsumerConnectionPointID в <asp:webpartconnection> теге элемента.When a static connection is declared, developers can designate which connection points are used for both the consumer and provider by assigning values to the ProviderConnectionPointID and ConsumerConnectionPointID attributes within the <asp:webpartconnection> element tag. Этот подход особенно удобен, если в элементах управления "потребитель" и "поставщик" определено несколько точек соединения, так как он позволяет статическому соединению определять, какие точки соединения следует использовать для соединения.This approach is especially useful if there are multiple connection points defined within the consumer and provider controls, because it enables the static connection to identify which connection points to use for the connection.

Динамические соединения создаются программно либо с помощью кода разработчика, либо пользователями через пользовательский интерфейс, предоставляемый ConnectionsZone элементом управления.Dynamic connections are created programmatically, either by a developer's code or by users through the user interface (UI) provided by the ConnectionsZone control. Чтобы создать соединение в коде, разработчики должны получить экземпляр WebPartConnection объекта, ConnectWebParts вызвав метод для WebPartManager элемента управления.To create a connection in code, developers must get an instance of a WebPartConnection object by calling the ConnectWebParts method on the WebPartManager control. Перед вызовом этого метода разработчики должны иметь ссылки на элементы управления сервера-получателя и поставщика и соответствующие объекты точек подключения.Before they can call this method, developers must have references to the consumer and provider server controls and their respective connection point objects. Чтобы получить ссылки на точки соединения для поставщика и элемента управления потребителя, разработчики сначала вызывают GetProviderConnectionPoints методы и GetConsumerConnectionPoints в WebPartManager элементе управления.To get references to the connection points for a provider and a consumer control, developers first call the GetProviderConnectionPoints and GetConsumerConnectionPoints methods on the WebPartManager control. Эти методы возвращают соответствующие объекты точек соединения, которые, в свою очередь, могут быть переданы методу для создания соединения.These methods return the appropriate connection point objects, which in turn can be passed to the method for creating a connection.

Если объекты точек соединения поставщика и потребителя работают с одним и тем же типом интерфейса, они являются совместимыми и могут формировать прямое соединение для совместного использования данных.When the provider's and the consumer's connection point objects both work with the same type of interface, they are compatible and can form a direct connection to share data. Если они не работают с одним и тем же типом интерфейса, WebPartTransformer необходимо использовать объект для преобразования экземпляра интерфейса из поставщика в тип, с которым может работать потребитель.If they do not work with the same interface type, a WebPartTransformer object must be used to translate the interface instance from the provider into a type that the consumer can work with.

Абстрактный ConnectionPoint класс предоставляет базовые сведения о точках соединения, которые являются общими для элементов управления "потребитель" и "поставщик".The abstract ConnectionPoint class provides the base details of connection points that are shared by both consumer and provider controls. Некоторые свойства содержат эти сведения.Several properties contain these details. AllowsMultipleConnections Свойство указывает, может ли точка соединения одновременно участвовать в нескольких соединениях.The AllowsMultipleConnections property indicates whether a connection point can participate in more than one connection at a time. По умолчанию точки соединения поставщика могут участвовать в нескольких соединениях, а точки подключения потребителя — нет.By default, provider connection points can participate in multiple connections, and consumer connection points cannot. ControlType Свойство указывает тип серверного элемента управления, связанного с точкой соединения.The ControlType property indicates the type of the server control associated with a connection point. Обратите внимание, WebPart что не только элементы управления могут формировать соединения. любой серверный элемент управления, ASP.NET элемент управления, Пользовательский элемент управления или пользовательский элемент управления, могут быть включены для участия в подключениях, если они размещены WebPartZoneBase в зоне.Note that not only WebPart controls can form connections; any server control, whether an ASP.NET control, a custom control, or a user control, can be enabled to participate in connections if placed in a WebPartZoneBase zone. DisplayName Свойство предоставляет понятное имя для точки подключения, которое может отображаться в пользовательском интерфейсе для помощи пользователям, создающим подключения.The DisplayName property provides a friendly name for the connection point that can be displayed in the UI to assist users who are creating connections. ID Свойство служит в качестве идентификатора строки для самого объекта точки подключения.The ID property serves as a string identifier for the connection point object itself. InterfaceType Свойство указывает тип экземпляра интерфейса, распознаваемый точкой подключения.The InterfaceType property indicates what type of interface instance the connection point understands. Будет ли данная точка соединения предоставлять или потреблять экземпляр этого интерфейса, определяется ли он ProviderConnectionPoint ConsumerConnectionPoint объектом или.Whether a given connection point provides or consumes an instance of that interface is determined by whether it is a ProviderConnectionPoint or a ConsumerConnectionPoint object.

ConnectionPoint Класс имеет один метод.The ConnectionPoint class has one method. GetEnabled Метод возвращает логическое значение, указывающее, может ли точка соединения в данный момент участвовать в соединениях.The GetEnabled method returns a Boolean value indicating whether a connection point is currently able to participate in connections.

Класс также имеет одно открытое поле, DefaultID. ConnectionPointThe ConnectionPoint class also has one public field, DefaultID. Это поле содержит значение, используемое для указания точки подключения по умолчанию в соединении.This field contains a value used to identify the default connection point in a connection.

Примечание

Атрибуты для указания методов точек соединения имеют только один обязательный параметр displayName, поэтому можно создать атрибут точки подключения по умолчанию без указания идентификатора.The attributes for specifying connection point methods have only one required parameter, displayName, so it is possible to create the default connection point attribute without specifying an ID. В таких случаях DefaultID поле предоставляет базовое значение для использования.In such cases, the DefaultID field supplies a base value to use.

Поля

DefaultID DefaultID DefaultID DefaultID

Представляет строку, по которой определяется точка подключения по умолчанию в коллекции точек подключения, сопоставленных с серверным элементом управления.Represents a string used to identify the default connection point within a collection of connection points associated with a server control.

Свойства

AllowsMultipleConnections AllowsMultipleConnections AllowsMultipleConnections AllowsMultipleConnections

Получает значение, которое показывает, поддерживает ли точка подключения несколько одновременных связей.Gets a value that indicates whether a connection point supports multiple simultaneous connections.

ControlType ControlType ControlType ControlType

Получает тип Type серверного элемента управления, с которым сопоставлена точка подключения.Gets the Type of the server control with which a connection point is associated.

DisplayName DisplayName DisplayName DisplayName

Получает строку, которая служит в качестве понятного отображаемого имени, представляющего точку подключения в пользовательском интерфейсе.Gets a string that serves as a friendly display name to represent a connection point in the user interface (UI).

ID ID ID ID

Получает строку, содержащую идентификатор для точки подключения.Gets a string that contains the identifier for a connection point.

InterfaceType InterfaceType InterfaceType InterfaceType

Получает тип интерфейса, используемого точкой подключения.Gets the type of the interface used by a connection point.

Методы

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Определяет, равен ли заданный объект текущему объекту.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetEnabled(Control) GetEnabled(Control) GetEnabled(Control) GetEnabled(Control)

Возвращает значение, которое показывает, может ли точка подключения участвовать в связях.Returns a value that indicates whether a connection point can participate in connections.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Служит хэш-функцией по умолчанию.Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

Возвращает строку, представляющую текущий объект.Returns a string that represents the current object.

(Inherited from Object)

Применяется к

Дополнительно