다음을 통해 공유


ConsumerConnectionPoint 클래스

정의

소비자 역할을 하는 서버 컨트롤에서 공급자와의 연결을 설정할 수 있도록 하는 연결 지점 개체를 정의합니다.

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
상속
ConsumerConnectionPoint

예제

다음 코드 예제에서는 소비자 연결 지점을 사용하는 각 경우에 선언적으로, 프로그래밍 방식으로 또는 UI를 통해 연결을 만드는 간단한 방법을 보여 줍니다.

이 예제에는 다음 네 부분이 있습니다.

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

  • 연결에 대한 공급자 및 소비자 역할을 하는 인터페이스 및 두 컨트롤 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 클래스도 있습니다. 다른 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> 선언적으로 만들어집니다. 이는 연결을 만드는 한 가지 방법을 보여 줍니다. 요소의 ConsumerConnectionPointID 특성을 기록해 <asp:webpartconnection> 둡니다. 프로그래밍 방식으로 연결을 만들 수도 있습니다. 를 수행하는 코드는 메서드에 있습니다 Button1_Click . 이 경우 개체가 ConsumerConnectionPoint 만들어지고 실제 연결을 만드는 메서드에 전달됩니다. 연결을 선언적으로 만들든 프로그래밍 방식으로 만들든 관계없이 항상 공급자와 소비자 모두에 대해 연결점을 지정해야 합니다. 메서드는 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가 나타납니다. 이는 앞에서 설명한 선언적 및 프로그래밍 방식 메서드와 함께 UI를 통해 연결을 만드는 또 다른 방법입니다. 연결 끊기 단추를 클릭하여 기존 정적 연결을 종료합니다. 소비자에 대한 연결 만들기 링크를 클릭합니다. 이제 UI에 소비자 연결 지점 표시 이름을 나열하는 드롭다운 컨트롤이 표시됩니다. 드롭다운 목록에서 연결 지점을 선택한 다음 연결을 클릭하여 연결을 완료합니다. 그런 다음 연결 끊기를 다시 클릭합니다. 동적 연결 단추를 클릭하여 프로그래밍 방식으로 연결을 만듭니다. 디스플레이 모드 컨트롤을 사용하여 페이지를 찾아보기 모드로 반환합니다. 연결점 세부 정보 단추를 다시 클릭하여 소비자 연결 지점 개체에 대한 세부 정보를 한 번 더 표시합니다.

이 예제에서는 웹 페이지 태그에 선언된 정적 연결의 세 가지 방법으로 연결을 설정하고 소비자 연결 지점을 사용하는 방법을 보여 줍니다. 개체를 사용한 ConsumerConnectionPoint 코드에서 만든 연결 및 연결 UI를 통해 사용자가 만든 연결입니다.

설명

두 서버 컨트롤 간의 모든 웹 파트 연결에서 각 컨트롤에는 연결에 대한 공급자 또는 소비자로 지정된 컨트롤인지 여부에 따라 다른 컨트롤에 연결하고 데이터를 제공하거나 사용할 수 있도록 하는 연결된 연결 지점 개체가 있어야 합니다. 일반적으로 개체에는 ConnectionPoint 컨트롤이 다른 컨트롤에 연결할 수 있는 방법과 공유할 수 있는 데이터 형식에 대한 세부 정보가 포함됩니다. 연결에서 소비자 역할을 하는 컨트롤의 경우 연결 지점은 개체여야 ConsumerConnectionPoint 합니다. 웹 파트 연결 및 연결 지점에 대한 자세한 내용은 아래 참고 항목 섹션에 나열된 항목을 참조하세요.

개체를 ConsumerConnectionPoint 만들려면 다음과 같은 몇 가지 단계가 필요합니다.

  1. 소비자 컨트롤이 인터페이스 인스턴스를 참조하도록 설정합니다. WebPart 또는 다른 서버 컨트롤(영역에 추가될 모든 유형의 서버 컨트롤을 WebPartZoneBase 사용할 수 있습니다)은 특정 인터페이스 인스턴스의 데이터를 사용할 수 있어야 합니다. 컨트롤은 인터페이스를 구현할 필요가 없습니다. 공급자만 구현해야 합니다. 소비자는 공급자가 제공하는 정확한 인터페이스 형식을 사용하거나, 그렇지 않은 WebPartTransformer 경우 개체를 사용하여 공급자의 인터페이스 형식에서 소비자가 이해하는 형식으로 데이터를 변환할 수 있습니다. 소비자를 사용하도록 설정하는 일반적인 방법은 원하는 인터페이스 형식에 대한 참조를 포함하도록 프라이빗 필드를 선언하는 것입니다.

  2. 콜백 메서드를 식별합니다. 공급자와의 연결을 설정하려면 소비자의 메서드를 콜백 메서드로 식별해야 합니다. 이 메서드는 공급자가 구현하는 인터페이스의 인스턴스를 검색하고 첫 번째 단계에서 만든 프라이빗 필드에 할당합니다(예: ). 소비자에서 콜백 메서드를 식별하기 위한 웹 파트 접근 방식은 인터페이스 인스턴스를 수신하는 메서드에 메타데이터 특성(클래스에 의해 ConnectionConsumerAttribute 정의됨)을 추가하는 ConnectionConsumer 것입니다. 특성이 추가되면 유일한 필수 매개 변수는 소비자 연결 지점에 사용할 표시 이름입니다. ID와 같은 선택적 매개 변수를 추가할 수도 있습니다.

  3. 인터페이스 인스턴스에서 데이터를 처리하고 출력합니다. 데이터에 필요한 내부 처리를 수행한 다음 일반적으로 소비자 컨트롤이 데이터를 페이지로 렌더링합니다. 이 작업을 수행하는 일반적인 방법은 컨트롤의 메서드를 재정의 OnPreRender 하는 것입니다.

    참고

    동기 요청 중에 소비자는 이벤트 도중 또는 이벤트 직후 PreRender 에 공급자로부터 직접 데이터를 요청해야 합니다. 비동기 요청 중에 렌더링하는 동안 공급자의 콜백 메서드가 호출되지 않은 경우 개발자는 소비자에게 데이터가 전송되지 않았다고 가정할 수 있습니다.

컨트롤이 소비자 역할을 할 수 있도록 갖추어진 후 컨트롤은 연결에 참여할 수 있습니다(공급자 컨트롤도 장착되고 사용할 수 있다고 가정). 웹 페이지의 태그에 정적 선언적 연결을 만들려면 개발자가 요소를 사용할 <asp:webpartconnection> 수 있습니다. 콜백 메서드를 ConnectionConsumer 식별하는 소비자 소스 코드의 특성이 연결 지점의 ID를 지정하는 경우 해당 값은 페이지의 요소에 있는 <asp:webpartconnection> 특성에 할당 ConsumerConnectionPointID 되어야 합니다. 개발자가 소비자 연결 지점에 대한 ID를 지정할 수 있는 이유는 소비자 컨트롤에 여러 연결점이 정의되어 있는 경우입니다. 소비자 컨트롤의 소비자 연결 지점에 대한 ID를 지정하지 않은 경우 필드에서 가져온 DefaultID 기본값을 사용하여 연결이 생성되므로 페이지의 특성에 값을 할당 ConsumerConnectionPointID 할 필요가 없습니다.

코드에서 연결을 만들려면 개발자는 메서드를 호출 GetConsumerConnectionPoints 하고 소비자 컨트롤의 ID와 소비자 컨트롤에 정의된 ConsumerConnectionPoint 개체의 ID 또는 인덱스를 전달하여 새 ConsumerConnectionPoint 개체를 만들어야 합니다. 반환 ConsumerConnectionPoint 된 개체는 소비자 컨트롤에 대한 참조, 공급자 컨트롤 및 해당 ProviderConnectionPoint 개체에 대한 참조와 함께 모두 메서드에 ConnectWebParts 전달되어 새 WebPartConnection 개체를 만듭니다.

개발자는 소비자 연결 지점을 선언적 또는 프로그래밍 방식으로 연결 설정의 일부로 사용할 수 있지만 사용자는 소비자 연결 지점과 상호 작용하여 UI(사용자 인터페이스)를 통해 연결을 설정할 수도 있습니다. 개발자가 웹 페이지에서 컨트롤을 ConnectionsZone 선언하는 경우 사용자가 연결을 만들 수 있는 런타임 UI를 제공합니다. 사용자가 연결 동사를 클릭하여 연결을 설정하기 위한 시작점으로 공급자 컨트롤을 선택하는 경우(소비자를 선택할 수도 있고 결과 연결에 차이가 없음) UI에서 공급자가 데이터를 보낼 수 있는 사용 가능한 소비자 연결 지점의 표시 이름(또는 여러 개 있는 경우 지점)이 있는 드롭다운 목록 컨트롤이 표시됩니다. 사용자는 소비자 연결 지점을 선택하여 연결을 설정해야 합니다.

개체는 ConsumerConnectionPoint 특정 소비자 컨트롤과 직접 연결하고 기본 ConnectionPoint 클래스에서 상속하는 속성에 연결에 대한 세부 정보를 저장합니다. 예를 들어 상속된 InterfaceType 속성에서 소비자 연결 지점은 사용하는 인터페이스의 형식을 유지합니다. 연결의 공급자와 소비자가 인터페이스 유형을 모두 이해하면 컨트롤이 호환되며 직접 연결을 형성할 수 있습니다. 공급자와 소비자가 동일한 인터페이스 형식으로 작업할 수 없는 경우 호환되지 않으며 개체를 WebPartTransformer 사용하여 공급자 연결 지점의 InterfaceType 속성을 소비자가 작업할 수 있는 형식으로 변환해야 합니다. 상속된 또 다른 중요한 속성은 DisplayName 사용자가 연결을 만들 때 소비자 연결 지점을 선택할 수 있도록 UI에 표시할 친숙한 이름을 제공하는 속성입니다. 개발자가 소비자 컨트롤의 콜백 메서드에 특성을 추가할 ConnectionConsumer 때 표시 이름은 필수 매개 변수입니다. 상속된 ID 속성은 소비자가 여러 연결 지점이 있는 경우 소비자 연결 지점에 대한 고유 식별자를 제공하기 때문에 위에서 설명한 대로 유용합니다. 소비자는 여러 ConsumerConnectionPoint 개체를 정의할 수 있으며, 이 경우 개발자가 메서드에 ConnectionConsumer 특성을 추가할 때 각 연결 지점을 구분하기 위해 ID 값을 지정해야 합니다. 다른 주목할 만한 상속된 속성은 AllowsMultipleConnections 소비자 연결 지점이 여러 공급자에 동시에 연결할 수 있는지 여부를 나타내는 속성입니다. 이 속성 값은 false 기본적으로 소비자 연결 지점에 대 한 (반면 공급자 연결 지점에 대 한 기본값 true ).

클래스는 ConsumerConnectionPoint 클래스에서 상속하는 멤버에 몇 가지 고유한 메서드를 ConnectionPoint 추가합니다. 메서드는 SetObject 소비자의 정의된 콜백 메서드를 호출하여 공급자에서 인터페이스 인스턴스를 검색합니다. 메서드는 SupportsConnection 연결된 소비자 컨트롤의 현재 상태에 따라 연결 지점이 연결을 설정할 수 있는지 여부를 나타내는 부울 값을 반환합니다.

생성자

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

ConsumerConnectionPoint 클래스의 새 인스턴스를 초기화합니다.

속성

AllowsMultipleConnections

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

(다음에서 상속됨 ConnectionPoint)
ControlType

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

(다음에서 상속됨 ConnectionPoint)
DisplayName

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

(다음에서 상속됨 ConnectionPoint)
ID

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

(다음에서 상속됨 ConnectionPoint)
InterfaceType

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

(다음에서 상속됨 ConnectionPoint)

메서드

Equals(Object)

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

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

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

(다음에서 상속됨 ConnectionPoint)
GetHashCode()

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

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

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

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

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

(다음에서 상속됨 Object)
SetObject(Control, Object)

소비자 컨트롤의 콜백 메서드를 호출하고 공급자 컨트롤에서 인터페이스 인스턴스를 검색합니다.

SupportsConnection(Control, ConnectionInterfaceCollection)

소비자 연결 지점에서 현재 연결을 설정할 수 있는지 여부를 확인합니다.

ToString()

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

(다음에서 상속됨 Object)

적용 대상

추가 정보