WebPartConnection 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
두 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 하여 소비자 제어에 대해 유사한 작업을 수행합니다. 마지막으로 컨트롤에서 메서드를 호출 ConnectWebParts 하여 새 WebPartConnection 개체를 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 컨트롤 연결 단추를 클릭합니다. 이 방법은 컨트롤을 사용할 필요 없이 하나의 간단한 단계에서 프로그래밍 방식으로 컨트롤을 ConnectionsZone 연결합니다. 연결이 만들어지면 공급자에 입력한 마지막 문자열이 소비자 컨트롤에 갑자기 표시됩니다.
설명
웹 파트 컨트롤 집합에서 연결은 데이터를 공유할 수 있는 두 WebPart 컨트롤(또는 다른 서버 또는 사용자) 컨트롤 간의 링크 또는 연결입니다. 이 데이터 공유 기능을 사용하면 연결된 컨트롤을 격리된 컨트롤에서 제공하는 기능을 초과하는 방식으로 사용할 수 있습니다. 예를 들어 한 컨트롤이 우편 번호 데이터를 제공하고 다른 컨트롤이 해당 데이터를 읽고 우편 번호에 따라 로컬 날씨 정보를 제공할 수 있는 경우 두 컨트롤의 연결된 기능은 사용자에게 더 많은 가치를 제공합니다. 이 예제를 확장하기 위해 우편 번호에 기반한 정보(예: 로컬 뉴스 링크가 있는 컨트롤)를 표시하는 다른 컨트롤을 만들 수 있으며, 우편 번호 데이터로 작업할 수 있는 이러한 모든 컨트롤은 우편 번호를 제공하는 단일 컨트롤과 데이터를 공유할 수 있습니다. 웹 파트 애플리케이션의 최종 사용자가 제공한 표준 연결 사용자 인터페이스 (UI)를 사용 하 여 웹 브라우저에서 직접 이러한 모든 호환 컨트롤 간의 연결을 만들고 수는 ConnectionsZone 컨트롤 또는 제공한 사용자 지정 UI를 사용 하는 개발자입니다.
이 WebPartConnection 클래스 개요는 연결을 만들기 위한 기본 세부 정보의 일반 문입니다. 연결 만들기와 관련된 특정 구성 요소 및 요구 사항에 대한 자세한 내용은 웹 파트 연결 개요를 참조하거나 다음 설명에 언급된 참조 클래스 및 코드 예제를 참조하세요. 웹 파트 연결에는 다음과 같은 몇 가지 기본 측면이 있습니다.
두 WebPart 컨트롤. 모든 웹 파트 연결은 두 개의 컨트롤로 구성됩니다. 컨트롤이 둘 이상의 연결에 동시에 참여할 수 있지만 모든 단일 연결은 정확히 두 개의 컨트롤로 구성됩니다. 컨트롤은 기본 클래스에서 WebPart 직접 파생되거나 ASP.NET 컨트롤, 사용자 지정 서버 컨트롤 및 사용자 컨트롤을 포함한 다른 서버 컨트롤일 수 있습니다. 클래스에서 WebPart 파생되지 않는 컨트롤(영역에 배치 WebPartZoneBase 된 경우)은 런타임에 개체로 GenericWebPart 자동으로 래핑되어 클래스에서 WebPart 상속되고 런타임 WebPart 컨트롤로 작동할 수 있습니다.
영역에 있는 WebPartZoneBase 컨트롤입니다. 웹 파트 연결(및 대부분의 다른 웹 파트 기능)에 WebPartZoneBase 참여하려면 컨트롤과 다른 유형의 서버 컨트롤이 모두 WebPart 영역에 있어야 합니다.
소비자 및 공급자. 모든 웹 파트 연결에는 데이터 공급자와 데이터 소비자의 두 가지 컨트롤이 있습니다. 공급자는 인터페이스 형식으로 데이터를 반환하는 지정된 콜백 메서드를 통해 소비자에게 데이터를 제공합니다. (콜백 메서드를 만들고 지정하는 방법에 대한 예제는 이 항목의 예제 섹션을 참조하세요.) 이 콜백 메서드를 공급자 연결 지점이라고 합니다. 이 연결 지점의 세부 정보("친숙한" 이름, ID 및 반환된 인터페이스의 형식)는 공급자 컨트롤과 연결된 개체에 ProviderConnectionPoint 포함됩니다. 소비자는 인터페이스의 인스턴스를 수락할 수 있는 지정된 메서드를 통해 데이터를 받습니다. 이 메서드를 소비자 연결 지점이라고 하며 연결 지점의 세부 정보(이름, ID 및 인터페이스 유형)는 소비자 컨트롤과 연결된 개체에 ConsumerConnectionPoint 포함됩니다.
호환되는 컨트롤 또는 유효한 변환기입니다. 연결이 작동하려면 소비자와 공급자가 호환되거나(지정된 연결 지점 메서드가 동일한 유형의 인터페이스에서 작동할 수 있음) 공급자가 제공하는 형식을 소비자가 이해하는 형식으로 변환할 수 있는 개체가 있어야 합니다 WebPartTransformer .
WebPartConnection 개체입니다. 연결이 존재하려면 공급자 및 소비자 컨트롤에 WebPartConnection 대한 참조와 연결 지점의 세부 정보가 포함된 클래스의 인스턴스가 있어야 합니다. 공급자와 소비자가 호환되지 않고 대신 개체를 WebPartTransformer 사용하여 연결하는 경우 연결은 변환기를 참조합니다.
연결을 설정하는 수단입니다. 호환되는 소비자 및 공급자 컨트롤이 연결 지점 메서드를 사용하여 올바르게 설계되고 영역에 배치되고 개체를 WebPartConnection 사용할 수 있게 된 후에는 연결을 시작하는 데 필요한 마지막 기본 단계가 필요합니다. 이 문제가 발생할 수 있는 한 가지 방법은 사용자가 UI를 통해 연결을 만드는 것입니다. 페이지에 요소를 배치
<asp:connectionszone>
하고 연결에 필요한 다른 구성 요소가 있는 경우 런타임에 사용자가 페이지를 연결 표시 모드로 전환할 수 있는 경우 공급자 또는 소비자의 동사 메뉴에서 연결 동사를 클릭하면 연결 UI(컨트롤 기반 ConnectionsZone )가 표시됩니다. 이 UI를 통해 사용자는 연결을 시작할 수 있습니다. 연결을 시작하는 또 다른 방법은 프로그래밍 방식으로 수행하는 것입니다. 두 경우 모두 UI를 통해 또는 프로그래밍 방식으로 연결을 시작하는 기본 메서드는 동일합니다. 애플리케이션이 호출을 ConnectWebParts 메서드 (또는 ConnectWebParts 변환기를 사용 하는 경우 메서드)에 WebPartManager 제어, 공급자, 소비자 및 해당 연결 지점 개체를 전달 하 고 메서드 반환를 WebPartConnection 개체입니다.
클래스는 WebPartConnection 두 WebPart 컨트롤 간의 연결에 대한 필수 세부 정보를 캡슐화하는 개체를 정의합니다. 클래스는 거의 전적으로 특정 연결의 세부 정보와 관련된 속성으로 구성됩니다. 여러 속성은 연결의 소비자 제어와 관련이 있습니다. 속성은 Consumer 소비자 컨트롤 자체를 참조하고 속성은 ConsumerID 소비자의 ID를 참조합니다. ConsumerConnectionPoint 소비자의 연결 지점에 대한 세부 정보가 포함된 개체는 소비자의 ConsumerConnectionPoint 속성에서 참조됩니다. 속성은 ConsumerConnectionPointID 개체의 ID를 ConsumerConnectionPoint 참조합니다. 이러한 모든 소비자 관련 연결 속성에는 연결을 만들기 위해 할당된 값이 있어야 합니다.
또한 클래스에는 WebPartConnection 연결의 공급자 컨트롤과 관련된 여러 속성이 있으며 소비자의 속성에 해당합니다. 속성은 Provider 공급자 컨트롤 자체를 참조하고 속성은 ProviderID 해당 ID를 참조합니다. 속성은 개체를 ProviderConnectionPoint 참조하고 속성은 ProviderConnectionPointProviderConnectionPointID 공급자의 연결 지점 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() 메서드를 재정의하고 연결 개체의 약식 형식 이름을 반환합니다. |
적용 대상
추가 정보
.NET