WebPartConnection 클래스

정의

WebPart 컨트롤에서 연결을 설정할 수 있도록 하는 개체를 제공합니다. 이 클래스는 상속될 수 없습니다.

public ref class WebPartConnection sealed
[System.ComponentModel.TypeConverter(typeof(System.ComponentModel.ExpandableObjectConverter))]
public sealed class WebPartConnection
[<System.ComponentModel.TypeConverter(typeof(System.ComponentModel.ExpandableObjectConverter))>]
type WebPartConnection = class
Public NotInheritable Class WebPartConnection
상속
WebPartConnection
특성

예제

다음 코드 예제에서는 두 WebPart 컨트롤 간에 간단한 연결을 만드는 방법을 보여 줍니다. 이 예제에서는 웹 페이지의 태그에 연결에 대한 태그를 배치하여 선언적으로 연결을 구성하는 세 가지 방법을 보여 줍니다. 프로그래밍 방식으로 코드에서 연결을 만듭니다. 및 UI를 통해 사용자가 연결을 설정할 수 있도록 하는 컨트롤을 페이지에 배치 ConnectionsZone 합니다.

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

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

  • 연결에 대한 공급자 및 소비자 역할을 하는 인터페이스 및 두 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 사용자 정의 컨트롤 및 사용자 지정 WebPart 컨트롤에 대한 지시문이 있습니다. 이 예제에서는 컨트롤의 동적 컴파일을 가정하므로 컨트롤의 소스 코드는 App_Code 하위 폴더에 있어야 합니다. 페이지의 태그는 Register 임의의 태그 접두사 및 컨트롤의 네임스페이스만 참조합니다. 사용자 지정 WebPart 컨트롤(공급자 및 소비자)은 웹 페이지의 <asp:webpartzone> 요소 내에서 요소 내에 <zonetemplate> 선언됩니다.

이 페이지는 사용자 지정 컨트롤 간의 연결을 형성하는 세 가지 방법을 제공합니다. 첫 번째 메서드는 선언적입니다. 페이지의 <StaticConnections> 태그에서 요소가 선언되고, 그 안에는 <asp:WebPartConnections> 특성으로 지정된 연결의 다양한 소비자 및 공급자 세부 정보가 있는 요소가 있습니다. 이는 특히 요소 내에서 <asp:WebPartManager> 웹 페이지에서 직접 선언하여 연결을 만드는 한 가지 방법입니다. 이 정적 연결로 인해 페이지가 처음 로드되면 두 사용자 지정 컨트롤 간의 연결이 즉시 만들어집니다.

컨트롤 간의 연결을 형성하기 위한 두 번째 메서드는 페이지의 요소에서 제공됩니다 <asp:connectionszone> . 사용자가 런타임에 페이지를 연결 표시 모드로 전환하고 사용자 지정 컨트롤 <asp:connectionszone> 중 하나에서 연결 동사를 클릭하면 요소가 연결을 만들기 위해 UI를 자동으로 렌더링합니다.

또한 이 페이지는 프로그래밍 방식으로 연결을 만드는 세 번째 방법을 보여 줍니다. 메서드에서 Button1_Click 코드는 공급자 컨트롤에 대한 개체를 만들고 ProviderConnectionPoint 메서드를 호출 GetProviderConnectionPoints 하여 연결점 세부 정보를 검색합니다. 메서드를 호출하여 소비자 제어에 대해 유사한 작업을 수행합니다 GetConsumerConnectionPoints . 마지막으로 컨트롤에서 메서드를 호출하여 새 WebPartConnection 개체를 ConnectWebParts WebPartManager 만듭니다.

<%@ 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"];
    WebPartConnection conn1 = mgr.ConnectWebParts(zip1, provPoint,
      weather1, connPoint);
  }

  protected void mgr_DisplayModeChanged(object sender, 
    WebPartDisplayModeEventArgs e)
  {
    if (mgr.DisplayMode == WebPartManager.ConnectDisplayMode)
      Button1.Visible = true;
    else
      Button1.Visible = false;
  }
</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" 
    OnDisplayModeChanged="mgr_DisplayModeChanged">
        <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="Connect WebPart Controls" 
        OnClick="Button1_Click" 
    Visible="false" />
    </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")
    mgr.ConnectWebParts(zip1, provPoint, weather1, connPoint)

  End Sub

  Protected Sub mgr_DisplayModeChanged (ByVal sender as Object, _
    ByVal e as WebPartDisplayModeEventArgs)

    If mgr.DisplayMode Is WebPartManager.ConnectDisplayMode Then
    Button1.Visible = True
    Else
    Button1.Visible = False
    End If

  End Sub
</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" 
    OnDisplayModeChanged="mgr_DisplayModeChanged">
        <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="Connect WebPart Controls" 
        OnClick="Button1_Click" 
    Visible="false" />
    </div>
    </form>
</body>
</html>

브라우저에서 웹 페이지를 로드한 후 첫 번째 연결은 요소 내에 <StaticConnections> 선언되어 있으므로 이미 존재합니다. 우편 번호 공급자 컨트롤에 일부 텍스트를 입력하면 소비자 컨트롤에 표시됩니다. 다음으로, 두 컨트롤의 연결을 끊습니다. 디스플레이 모드 드롭다운 목록 컨트롤을 사용하여 페이지를 변경하여 디스플레이 모드를 연결합니다. 각 WebPart 컨트롤에 대해 동사 메뉴(제목 표시줄에서 아래쪽 화살표로 표시됨)를 클릭하고 각각 에 커넥트 옵션이 있음을 확인합니다. 이 동사는 페이지가 연결 모드에 있을 때만 동사 메뉴에 나타납니다. 컨트롤 중 하나에서 연결 동사를 클릭하면 컨트롤에서 제공하는 연결 UI가 ConnectionsZone 나타납니다. 연결 끊기 단추를 클릭하여 컨트롤 간의 정적 연결을 종료합니다. 디스플레이 모드 컨트롤을 사용하여 페이지를 찾아보기 모드로 반환합니다. 공급자에 새 텍스트를 다시 입력하고 컨트롤의 연결이 끊어지므로 소비자 컨트롤에서 텍스트가 업데이트되지 않습니다.

다음으로 위와 동일한 방법을 사용하여 페이지를 다시 연결 표시 모드로 전환합니다. 컨트롤 중 하나에서 연결 동사를 클릭합니다. 연결 만들기 링크를 클릭하고 컨트롤에서 제공하는 UI를 ConnectionsZone 사용하여 컨트롤 간에 연결을 만듭니다. 연결을 만드는 두 번째 방법입니다. 연결이 형성되는 즉시 연결이 다시 만들어졌기 때문에 공급자 컨트롤에 입력한 마지막 문자열(컨트롤의 연결이 끊어졌기 때문에 나타나지 않은)이 소비자에 갑자기 나타납니다. 연결 끊기 단추를 클릭하여 방금 만든 현재 연결을 종료합니다. 찾아보기 모드로 페이지를 반환합니다. 공급자에 새 텍스트를 입력하여 텍스트가 업데이트되지 않았으며 컨트롤의 연결이 다시 끊어지는 것을 보여 줍니다.

페이지를 반환하여 표시 모드를 연결합니다. 연결 동사를 클릭하는 대신 연결을 구성하는 세 번째 방법을 보여 커넥트 WebPart Controls 단추를 클릭합니다. 이 방법은 컨트롤을 사용하지 않고도 간단한 한 단계로 프로그래밍 방식으로 컨트롤을 연결합니다 ConnectionsZone . 연결이 만들어질 때 공급자에 입력한 마지막 문자열이 소비자 컨트롤에 갑자기 나타납니다.

설명

웹 파트 컨트롤 집합에서 연결은 데이터를 공유할 수 있는 두 WebPart 컨트롤(또는 다른 서버 또는 사용자) 컨트롤 간의 링크 또는 연결입니다. 이 데이터 공유 기능을 사용하면 연결된 컨트롤을 격리된 컨트롤에서 제공하는 기능을 초과하는 방식으로 사용할 수 있습니다. 예를 들어 한 컨트롤이 우편 번호 데이터를 제공하고 다른 컨트롤이 해당 데이터를 읽고 우편 번호에 따라 로컬 날씨 정보를 제공할 수 있는 경우 두 컨트롤의 연결된 기능은 사용자에게 더 많은 가치를 제공합니다. 이 예제를 확장하기 위해 우편 번호에 대한 링크가 있는 컨트롤과 같은 우편 번호 기반 정보를 표시하는 다른 컨트롤을 만들 수 있으며, 우편 번호 데이터로 작업할 수 있는 이러한 모든 컨트롤은 우편 코드를 제공하는 단일 컨트롤과 데이터를 공유할 수 있습니다. 웹 파트 애플리케이션의 최종 사용자가 제공한 표준 연결 사용자 인터페이스 (UI)를 사용 하 여 웹 브라우저에서 직접 이러한 모든 호환 컨트롤 간의 연결을 만들고 수는 ConnectionsZone 컨트롤 또는 제공한 사용자 지정 UI를 사용 하는 개발자입니다.

WebPartConnection 클래스 개요는 연결을 만들기 위한 기본 세부 정보에 대한 일반적인 설명입니다. 연결 만들기와 관련된 특정 구성 요소 및 요구 사항에 대한 자세한 내용은 웹 파트 연결 개요를 참조하거나 다음 설명에서 언급한 참조 클래스 및 코드 예제를 참조하세요. 웹 파트 연결에는 몇 가지 기본적인 측면이 있습니다.

  • WebPart 컨트롤. 모든 웹 파트 연결은 두 개의 컨트롤로 구성됩니다. 컨트롤이 둘 이상의 연결에 동시에 참여할 수 있지만 모든 단일 연결은 정확히 두 개의 컨트롤로 구성됩니다. 컨트롤은 기본 클래스에서 WebPart 직접 파생되거나 ASP.NET 컨트롤, 사용자 지정 서버 컨트롤 및 사용자 정의 컨트롤을 포함한 다른 서버 컨트롤일 수 있습니다. 클래스에서 WebPart 파생되지 않는 컨트롤(영역에 배치 WebPartZoneBase 된 경우)은 런타임에 개체로 GenericWebPart 자동으로 래핑되어 클래스에서 WebPart 상속되고 런타임 WebPart 컨트롤로 작동할 수 있습니다.

  • 영역에 있는 WebPartZoneBase 컨트롤입니다. 웹 파트 연결(및 대부분의 다른 웹 파트 기능)에 참여할 수 있도록 컨트롤과 다른 유형의 서버 컨트롤이 모두 WebPart 영역에 있어야 WebPartZoneBase 합니다.

  • 소비자 및 공급자. 모든 웹 파트 연결에는 데이터 공급자와 데이터 소비자라는 두 가지 컨트롤이 있습니다. 공급자는 인터페이스의 형태로 데이터를 반환하는 지정된 콜백 메서드를 통해 소비자에게 데이터를 제공합니다. (콜백 메서드를 만들고 지정하는 방법의 예는 이 항목의 예제 섹션을 참조하세요.) 이 콜백 메서드를 공급자 연결 지점이라고 합니다. 이 연결점의 세부 정보("친숙한" 이름, ID 및 반환된 인터페이스의 형식)는 공급자 컨트롤과 연결된 개체에 ProviderConnectionPoint 포함됩니다. 소비자는 인터페이스의 인스턴스를 수락할 수 있는 지정된 메서드를 통해 데이터를 받습니다. 이 메서드를 소비자 연결 지점이라고 하며 연결 지점의 세부 정보(이름, ID 및 인터페이스 형식)는 소비자 컨트롤과 연결된 개체에 ConsumerConnectionPoint 포함됩니다.

  • 호환 가능한 컨트롤 또는 유효한 변환기입니다. 연결이 작동하려면 소비자와 공급자가 호환되어야 합니다(지정된 연결점 메서드가 동일한 인터페이스 형식으로 작동할 수 있음) 공급자가 제공하는 형식을 소비자가 이해하는 형식으로 변환할 수 있는 개체가 있어야 WebPartTransformer 합니다.

  • WebPartConnection 개체입니다. 연결이 존재하려면 공급자 및 소비자 컨트롤에 WebPartConnection 대한 참조와 연결 지점의 세부 정보가 포함된 클래스의 인스턴스가 있어야 합니다. 공급자와 소비자가 호환되지 않고 대신 개체를 WebPartTransformer 사용하여 연결하는 경우 연결은 변환기를 참조합니다.

  • 연결을 설정하는 수단입니다. 호환되는 소비자 및 공급자 컨트롤이 연결점 메서드를 사용하여 올바르게 설계되고 영역에 배치되고 개체를 WebPartConnection 사용할 수 있게 된 후에는 연결을 시작하는 데 필요한 마지막 기본 단계가 필요합니다. 이 작업이 발생할 수 있는 한 가지 방법은 사용자가 UI를 통해 연결을 만드는 것입니다. 페이지에 요소를 배치 <asp:connectionszone> 하고 연결에 필요한 다른 구성 요소가 있는 경우 런타임에 사용자가 페이지를 연결 표시 모드로 전환할 수 있는 경우 공급자 또는 소비자의 동사 메뉴에서 연결 동사를 클릭하면 연결 UI(컨트롤 기반 ConnectionsZone )가 표시됩니다. 이 UI를 통해 사용자는 연결을 시작할 수 있습니다. 연결을 시작하는 또 다른 방법은 프로그래밍 방식으로 수행하는 것입니다. 두 경우 모두 UI를 통해 또는 프로그래밍 방식으로 연결을 시작하는 기본 메서드는 동일합니다. 애플리케이션이 호출을 ConnectWebParts 메서드 (또는 ConnectWebParts 변환기를 사용 하는 경우 메서드)에 WebPartManager 제어, 공급자, 소비자 및 해당 연결 지점 개체를 전달 하 고 메서드 반환를 WebPartConnection 개체입니다.

클래스는 WebPartConnectionWebPart 컨트롤 간의 연결에 대한 필수 세부 정보를 캡슐화하는 개체를 정의합니다. 클래스는 거의 전적으로 특정 연결의 세부 정보와 관련된 속성으로 구성됩니다. 연결의 소비자 컨트롤과 관련된 몇 가지 속성이 있습니다. 이 속성은 Consumer 소비자 컨트롤 자체를 참조하고 속성은 ConsumerID 소비자의 ID를 참조합니다. ConsumerConnectionPoint 소비자의 연결점에 대한 세부 정보를 포함하는 개체는 소비자의 ConsumerConnectionPoint 속성에서 참조됩니다. 이 속성은 ConsumerConnectionPointID 개체의 ID를 참조합니다 ConsumerConnectionPoint . 이러한 모든 소비자 관련 연결 속성에는 연결을 만들기 위해 할당된 값이 있어야 합니다.

WebPartConnection 또한 클래스에는 연결의 공급자 컨트롤과 관련된 여러 속성이 있으며 이러한 속성은 소비자의 속성에 해당합니다. 속성이 해당 ID를 참조하는 동안 속성은 Provider ProviderID 공급자 컨트롤 자체를 참조합니다. 속성은 ProviderConnectionPoint 개체를 ProviderConnectionPoint 참조하고 ProviderConnectionPointID 속성은 공급자의 연결 지점 ID를 참조합니다.

몇 가지 속성은 연결 상태에 관한 것입니다. 이 속성은 IsActive 연결이 활성 상태인지(현재 데이터 교환 중) 또는 비활성(여전히 연결되었지만 적극적으로 데이터를 공유하지 않음)을 나타냅니다. 이 속성은 IsShared 연결이 공유(페이지의 모든 사용자가 사용할 수 있음) 또는 사용자별 연결인지 여부를 나타내며 IsStatic , 이 속성은 컨트롤이 정적(페이지 태그에 선언되어 영구적으로 선언됨) 또는 동적(프로그래밍 방식으로 생성됨, 삭제 가능)인지 여부를 나타냅니다.

생성자

WebPartConnection()

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

속성

Consumer

연결에서 소비자 컨트롤 역할을 하는 WebPart 개체를 가져옵니다.

ConsumerConnectionPoint

연결에서 소비자 역할을 하는 컨트롤의 연결 지점으로 사용되는 개체를 가져옵니다.

ConsumerConnectionPointID

연결에서 소비자 연결 지점 역할을 하는 개체의 ID를 참조하는 속성 값을 가져오거나 설정합니다.

ConsumerID

연결에서 소비자 역할을 하는 WebPart 컨트롤의 ID를 참조하는 속성 값을 가져오거나 설정합니다.

ID

WebPartConnection 개체의 ID를 가져오거나 설정합니다.

IsActive

WebPartConnection 개체가 현재 설정되어 있고 공급자 컨트롤과 소비자 컨트롤 간에 데이터를 교환할 수 있는지 여부를 나타내는 값을 가져옵니다.

IsShared

WebPartConnection 개체가 모든 사용자에게 표시되는지 아니면 현재 사용자에게만 표시되는지를 나타내는 값을 가져옵니다.

IsStatic

WebPartConnection 개체가 웹 페이지의 태그에서 선언되었는지 아니면 프로그래밍 방식으로 만들어졌는지를 나타내는 값을 가져옵니다.

Provider

웹 파트 연결에서 공급자 역할을 하는 WebPart 컨트롤을 가져옵니다.

ProviderConnectionPoint

연결의 공급자 역할을 하는 WebPart 컨트롤의 연결 지점으로 사용되는 개체를 가져옵니다.

ProviderConnectionPointID

연결에서 공급자 연결 지점 역할을 하는 개체의 ID를 참조하는 속성 값을 가져오거나 설정합니다.

ProviderID

연결에서 공급자 역할을 하는 WebPart 컨트롤의 ID를 참조하는 속성 값을 가져오거나 설정합니다.

Transformer

웹 파트 연결에서 데이터를 변환하지 않으면 호환되지 않는 두 연결 지점 간에 데이터를 변환하는 데 사용되는 WebPartTransformer 개체를 가져옵니다.

Transformers

웹 파트 컨트롤 집합에서 내부적으로 사용되는 WebPartTransformer 개체의 컬렉션을 가져옵니다.

메서드

Equals(Object)

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

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

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

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

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

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

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

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

상속된 ToString() 메서드를 재정의하고 연결 개체의 약식 형식 이름을 반환합니다.

적용 대상

추가 정보