다음을 통해 공유


ConnectionPoint 클래스

정의

웹 파트 연결에서 소비자 컨트롤과 공급자 컨트롤이 데이터를 공유할 수 있도록 하는 연결 지점 개체를 정의하는 기본 클래스로 사용됩니다.

public ref class ConnectionPoint abstract
public abstract class ConnectionPoint
type ConnectionPoint = class
Public MustInherit Class ConnectionPoint
상속
ConnectionPoint
파생

예제

다음 코드 예제에서는 필요한 ConnectionPoint 개체를 포함하는 웹 파트 연결을 만드는 방법을 보여 줍니다. 클래스는 ConnectionPoint 추상 기본 클래스이므로 자식 클래스ProviderConnectionPointConsumerConnectionPoint및 --의 인스턴스는 연결을 형성하는 데 사용되는 실제 개체입니다.

이 예제에는 네 부분으로 구성합니다.

  • 페이지에서 웹 파트 표시 모드를 변경할 수 있는 사용자 컨트롤입니다.

  • 연결에 대한 공급자 및 소비자 역할을 하는 인터페이스 및 두 컨트롤 WebPart 에 대한 소스 코드입니다.

  • 모든 컨트롤을 호스트하고 코드 예제를 실행하는 웹 페이지입니다.

  • 예제 페이지를 실행하는 방법에 대한 설명입니다.

이 코드 예제에 첫 번째 부분은 사용자가 웹 페이지의 디스플레이 모드를 변경할 수 있는 사용자 정의 컨트롤입니다. 다음 소스 코드를 .ascx 파일에 저장하여 호스팅 웹 페이지의 맨 위에 있는 이 사용자 컨트롤에 대한 지시문의 Register 특성에 할당된 Src 파일 이름을 제공합니다. 표시 모드 및 이 컨트롤의 소스 코드에 대한 설명에 대한 자세한 내용은 연습: 웹 파트 페이지에서 디스플레이 모드 변경을 참조하세요.

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

코드 예제의 두 번째 부분은 인터페이스 및 컨트롤에 대한 소스 코드입니다. 원본 파일에는 라는 IZipCode간단한 인터페이스가 포함되어 있습니다. 인터페이스를 WebPart 구현하고 공급자 컨트롤 역할을 하는 라는 ZipCodeWebPart 클래스도 있습니다. 해당 ProvideIZipCode 메서드는 인터페이스의 유일한 멤버를 구현하는 콜백 메서드입니다. 메서드는 단순히 인터페이스의 인스턴스를 반환합니다. 메서드는 해당 메타데이터에 특성으로 ConnectionProvider 표시됩니다. 이는 메서드를 공급자의 연결 지점에 대한 콜백 메서드로 식별하는 메커니즘입니다. 다른 WebPart 클래스의 이름은 WeatherWebPart이고 연결의 소비자 역할을 합니다. 이 클래스에는 공급자 컨트롤에서 인터페이스의 인스턴스를 IZipCode 가져오는 라는 GetZipCode 메서드가 있습니다. 이 메서드는 해당 메타데이터에 특성이 있는 소비자의 연결 지점 메서드로 ConnectionConsumer 표시됩니다. 소비자 제어에서 연결점 메서드를 식별하는 메커니즘입니다.

코드 예제를 실행하려면 이 소스 코드를 컴파일해야 합니다. 명시적으로 컴파일하고 결과 어셈블리를 웹 사이트의 Bin 폴더 또는 전역 어셈블리 캐시에 넣을 수 있습니다. 또는 런타임에 동적으로 컴파일되는 사이트의 App_Code 폴더에 소스 코드를 배치할 수 있습니다. 이 코드 예제에서는 동적 컴파일을 사용합니다. 컴파일 방법을 보여 주는 연습은 연습: 사용자 지정 웹 서버 컨트롤 개발 및 사용을 참조하세요.

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

코드 예제의 세 번째 부분은 웹 페이지입니다. 위쪽 근처에는 Register 연결을 구성하는 사용자 지정 컨트롤을 등록하는 지시문과 사용자가 페이지의 표시 모드를 변경할 수 있는 사용자 컨트롤이 있습니다. 연결 자체는 페이지의 요소 내에서 <staticconnections> 선언적으로 만들어집니다. 프로그래밍 방식으로 연결을 만들 수도 있습니다. 메서드에 포함된 Button1_Click 작업을 수행하기 위한 코드입니다. 연결을 선언적으로 만들든 프로그래밍 방식으로든 공급자와 소비자 모두에 대해 항상 연결 지점을 지정해야 합니다. 메서드는 Button2_Click 공급자와 소비자 모두에 대 한 개체에 액세스 ConnectionPoint 하 고 페이지의 레이블에 해당 속성 값의 일부를 씁니다.

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

브라우저에서 페이지를 로드한 후 연결 지점 세부 정보 단추를 클릭합니다. 선언적 연결에 설정된 공급자 및 소비자 연결 지점에 대한 정보가 나타납니다. 다음으로 , 디스플레이 모드 드롭다운 컨트롤을 사용하여 페이지를 연결 모드로 전환합니다. 컨트롤 중 WebPart 하나의 동사 메뉴(제목 표시줄에서 아래쪽 화살표로 표시됨)에서 연결 동사를 클릭합니다. 페이지에 선언된 컨트롤에 <asp:connectionszone> 의해 자동으로 만들어지는 연결 UI가 나타납니다. 연결 끊기 단추를 클릭하여 기존 연결을 종료합니다. 디스플레이 모드 컨트롤을 사용하여 페이지를 반환하여 모드를 찾아봅니다. 그런 다음 동적 연결 단추를 클릭하여 프로그래밍 방식으로 연결을 만듭니다. 연결점 세부 정보 단추를 다시 클릭하여 두 연결 지점 개체에 대한 세부 정보를 표시합니다.

설명

모든 웹 파트 연결은 데이터를 공유하는 두 개의 서버 컨트롤로 구성됩니다. 한 컨트롤은 소비자이고 다른 하나는 공급자입니다. 웹 파트 연결의 필수 구성 요소와 연결 개체 자체에 대한 자세한 내용은 클래스 개요를 WebPartConnection 참조하세요. 모든 웹 파트 연결에는 연결점이 필요합니다. 공급자와 소비자 컨트롤에는 각각 컨트롤이 다른 컨트롤에 연결할 수 있는 방법과 공유할 수 있는 데이터 형식에 대한 세부 정보가 포함된 하나 이상의 정의된 ConnectionPoint 개체(각각에 선택적으로 여러 연결점이 있을 수 있음)가 있어야 합니다. 실제 연결에서 공급자는 자체 유형의 연결점 개체(기본 ConnectionPoint 클래스에서 파생됨), 인스턴스를 ProviderConnectionPoint 가지고 있으며 소비자에는 자체 개체인 인스턴스가 있습니다 ConsumerConnectionPoint .

공급자 연결 지점을 만들려면 개발자는 구현된 인터페이스 인스턴스를 소비자에게 반환하는 콜백 메서드를 공급자에 추가해야 합니다. 소스 코드에서 콜백 메서드를 코드 특성으로 ConnectionProvider 표시해야 합니다(클래스 참조 ConnectionProviderAttribute ). 마찬가지로 소비자 연결 지점을 만들려면 개발자는 인터페이스 인스턴스를 수신하는 메서드를 소비자에게 추가해야 하며 해당 메서드를 특성으로 ConnectionConsumer 표시해야 합니다(클래스 참조 ConnectionConsumerAttribute ).

개발자가 웹 페이지에서 연결을 만들 때 정적 또는 동적 연결로 만들 수 있습니다. 정적 연결은 웹 페이지의 태그에 선언됩니다. 정적 연결이 선언되면 개발자는 요소 태그 내 <asp:webpartconnection> 의 및 ConsumerConnectionPointID 특성에 값을 ProviderConnectionPointID 할당하여 소비자와 공급자 모두에 사용되는 연결점을 지정할 수 있습니다. 이 방법은 정적 연결을 사용하여 연결에 사용할 연결 지점을 식별할 수 있으므로 소비자 및 공급자 컨트롤 내에 정의된 연결점이 여러 개 있는 경우에 특히 유용합니다.

동적 연결은 개발자 코드 또는 사용자가 컨트롤에서 제공하는 ConnectionsZone UI(사용자 인터페이스)를 통해 프로그래밍 방식으로 만들어집니다. 코드에서 연결을 만들려면 개발자는 컨트롤에서 메서드를 WebPartConnection 호출하여 개체의 인스턴스를 ConnectWebPartsWebPartManager 가져와야 합니다. 이 메서드를 호출하기 전에 개발자는 소비자 및 공급자 서버 컨트롤과 해당 연결 지점 개체에 대한 참조가 있어야 합니다. 공급자 및 소비자 컨트롤에 대한 연결 지점에 대한 참조를 가져오기 위해 개발자는 먼저 컨트롤의 GetProviderConnectionPointsGetConsumerConnectionPoints 메서드를 WebPartManager 호출합니다. 이러한 메서드는 적절한 연결 지점 개체를 반환하며, 이 개체는 연결을 만들기 위한 메서드에 전달될 수 있습니다.

공급자와 소비자의 연결 지점 개체가 모두 동일한 유형의 인터페이스에서 작동하는 경우 호환되며 직접 연결을 형성하여 데이터를 공유할 수 있습니다. 동일한 인터페이스 형식에서 작동하지 않는 경우 개체를 WebPartTransformer 사용하여 공급자의 인터페이스 인스턴스를 소비자가 작업할 수 있는 형식으로 변환해야 합니다.

추상 ConnectionPoint 클래스는 소비자 및 공급자 컨트롤에서 공유하는 연결 지점의 기본 세부 정보를 제공합니다. 여러 속성에는 이러한 세부 정보가 포함됩니다. 속성은 AllowsMultipleConnections 연결 지점이 한 번에 둘 이상의 연결에 참여할 수 있는지 여부를 나타냅니다. 기본적으로 공급자 연결 지점은 여러 연결에 참여할 수 있으며 소비자 연결 지점은 참여할 수 없습니다. 속성은 ControlType 연결 지점과 연결된 서버 컨트롤의 형식을 나타냅니다. 컨트롤은 연결을 형성할 수 있을 뿐만 WebPart 아니라 ASP.NET 컨트롤, 사용자 지정 컨트롤 또는 사용자 정의 컨트롤이 영역에 배치된 경우 연결에 참여할 수 있는 모든 서버 컨트롤을 WebPartZoneBase 사용하도록 설정할 수 있습니다. 속성은 DisplayName 연결을 만드는 사용자를 지원하기 위해 UI에 표시할 수 있는 연결 지점에 대한 친숙한 이름을 제공합니다. 속성은 ID 연결점 개체 자체에 대한 문자열 식별자 역할을 합니다. 속성은 InterfaceType 연결 지점이 이해하는 인터페이스 인스턴스의 형식을 나타냅니다. 지정된 연결 지점이 해당 인터페이스의 인스턴스를 제공하거나 사용하는지 여부는 개체인지에 따라 결정됩니다 ProviderConnectionPointConsumerConnectionPoint .

클래스에는 ConnectionPoint 하나의 메서드가 있습니다. 메서드는 GetEnabled 연결 지점이 현재 연결에 참여할 수 있는지 여부를 나타내는 부울 값을 반환합니다.

클래스에는 ConnectionPoint 하나의 공용 필드도 있습니다 DefaultID. 이 필드에는 연결의 기본 연결 지점을 식별하는 데 사용되는 값이 포함되어 있습니다.

참고

연결점 메서드를 지정하는 특성에는 필수 매개 변수 가 displayName하나만 있으므로 ID를 지정하지 않고 기본 연결점 특성을 만들 수 있습니다. 이러한 경우 DefaultID 필드는 사용할 기본 값을 제공합니다.

필드

DefaultID

서버 컨트롤과 연결된 연결 지점 컬렉션 내의 기본 연결 지점을 식별하는 데 사용되는 문자열을 나타냅니다.

속성

AllowsMultipleConnections

연결 지점에서 여러 개의 동시 연결을 지원하는지 여부를 나타내는 값을 가져옵니다.

ControlType

연결 지점이 연결된 서버 컨트롤의 Type을 가져옵니다.

DisplayName

UI(사용자 인터페이스)에 있는 연결 지점을 나타내는 표시 이름으로 사용되는 문자열을 가져옵니다.

ID

연결 지점에 대한 식별자가 포함된 문자열을 가져옵니다.

InterfaceType

연결 지점에서 사용하는 인터페이스의 형식을 가져옵니다.

메서드

Equals(Object)

지정된 개체가 현재 개체와 같은지 확인합니다.

(다음에서 상속됨 Object)
GetEnabled(Control)

연결 지점이 연결에 참여할 수 있는지 여부를 나타내는 값을 반환합니다.

GetHashCode()

기본 해시 함수로 작동합니다.

(다음에서 상속됨 Object)
GetType()

현재 인스턴스의 Type을 가져옵니다.

(다음에서 상속됨 Object)
MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.

(다음에서 상속됨 Object)
ToString()

현재 개체를 나타내는 문자열을 반환합니다.

(다음에서 상속됨 Object)

적용 대상

추가 정보