다음을 통해 공유


ProviderConnectionPoint 클래스

정의

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

public ref class ProviderConnectionPoint : System::Web::UI::WebControls::WebParts::ConnectionPoint
public class ProviderConnectionPoint : System.Web.UI.WebControls.WebParts.ConnectionPoint
type ProviderConnectionPoint = class
    inherit ConnectionPoint
Public Class ProviderConnectionPoint
Inherits ConnectionPoint
상속
ProviderConnectionPoint

예제

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

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

설명

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

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

  1. 인터페이스를 만듭니다. 공급자가 소비자와 데이터를 공유하는 경우 인터페이스의 인스턴스를 가져오고 해당 인스턴스를 소비자에게 반환하여 데이터를 공유합니다.

  2. 공급자에서 인터페이스를 구현합니다. 공급자가 WebPart 될 또는 다른 서버 컨트롤(영역에 있는 WebPartZoneBase 모든 유형의 서버 컨트롤을 사용할 수 있습니다)은 첫 번째 단계에서 만든 인터페이스를 구현해야 합니다.

  3. 콜백 메서드를 식별합니다. 연결을 설정하려면 공급자의 메서드를 콜백 메서드로 식별해야 합니다. 이 메서드는 구현된 인터페이스의 인스턴스를 소비자에게 반환합니다. 공급자에서 콜백 메서드를 식별하기 위한 웹 파트 접근 방식은 인터페이스 인스턴스를 ConnectionProvider 반환하는 메서드에 메타데이터 특성(클래스에 의해 ConnectionProviderAttribute 정의됨)을 추가하는 것입니다. 특성이 추가되면 유일한 필수 매개 변수는 공급자 연결 지점에 사용할 표시 이름입니다. 연결 지점의 ID와 같은 선택적 매개 변수를 추가할 수도 있습니다.

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

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

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

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

클래스는 ProviderConnectionPoint 클래스에서 상속하는 멤버에 몇 가지 고유한 메서드를 ConnectionPoint 추가합니다. 메서드는 GetObject 콜백 메서드가 소비자에게 반환할 인터페이스의 인스턴스를 검색합니다. 메서드는 GetSecondaryInterfaces 기존 연결의 일부이지만 연결을 설정하는 데 사용되는 인터페이스가 아닌 추가 소비자 인터페이스를 검색합니다.

생성자

ProviderConnectionPoint(MethodInfo, Type, Type, String, String, Boolean)

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

속성

AllowsMultipleConnections

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

(다음에서 상속됨 ConnectionPoint)
ControlType

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

(다음에서 상속됨 ConnectionPoint)
DisplayName

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

(다음에서 상속됨 ConnectionPoint)
ID

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

(다음에서 상속됨 ConnectionPoint)
InterfaceType

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

(다음에서 상속됨 ConnectionPoint)

메서드

Equals(Object)

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

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

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

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

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

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

인터페이스 인스턴스를 가져와 소비자에게 반환하는 공급자 컨트롤의 콜백 메서드를 호출합니다.

GetSecondaryInterfaces(Control)

공급자 연결 지점에서 지원할 수 있는 보조 인터페이스의 선택적 컬렉션을 가져옵니다.

GetType()

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

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

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

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

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

(다음에서 상속됨 Object)

적용 대상

추가 정보