WebPartManager.DisconnectWebPart(WebPart) 메서드

정의

닫거나 삭제할 WebPart 또는 서버 컨트롤을 해당 컨트롤이 참여하는 연결에서 제거합니다.

protected:
 virtual void DisconnectWebPart(System::Web::UI::WebControls::WebParts::WebPart ^ webPart);
protected virtual void DisconnectWebPart (System.Web.UI.WebControls.WebParts.WebPart webPart);
abstract member DisconnectWebPart : System.Web.UI.WebControls.WebParts.WebPart -> unit
override this.DisconnectWebPart : System.Web.UI.WebControls.WebParts.WebPart -> unit
Protected Overridable Sub DisconnectWebPart (webPart As WebPart)

매개 변수

webPart
WebPart

연결을 끊을 WebPart 컨트롤입니다.

예제

다음 코드 예제에서는 DisconnectWebPart 메서드를 사용하는 방법을 보여 줍니다. 웹 페이지에서는 두 개의 사용자 지정 WebPart 컨트롤을 사용하여 단추를 클릭하여 컨트롤 간에 연결을 만들 수 있고 다른 단추를 사용하면 컨트롤의 연결을 끊을 수 있습니다. 페이지가 찾아보기 모드이고 컨트롤이 연결된 동안 컨트롤 중 하나를 닫으면 메서드 재정의가 닫힌 컨트롤의 DisconnectWebPart 연결을 끊고 연결을 종료하고 메시지를 표시합니다.

코드 예제에는 네 부분으로 구성됩니다.

  • 디스플레이 모드를 변경하기 위한 사용자 컨트롤입니다.

  • 사용자 지정 WebPart 컨트롤을 포함하는 원본 파일입니다.

  • 컨트롤을 호스트할 웹 페이지입니다.

  • 예제가 브라우저에서 작동하는 방식에 대한 설명입니다.

코드 예제의 첫 번째 부분은 디스플레이 모드를 변경하기 위한 사용자 컨트롤입니다. 클래스 개요의 예제 섹션에서 사용자 컨트롤에 WebPartManager 대한 소스 코드를 가져올 수 있습니다. 디스플레이 모드 및 사용자 컨트롤의 작동 방식에 대한 자세한 내용은 연습: 웹 파트 페이지에서 디스플레이 모드 변경을 참조하세요.

두 번째 부분은 연결될 두 개의 사용자 지정 WebPart 컨트롤에 대한 소스 코드와 사용자 지정 WebPartManager 컨트롤이 포함된 파일입니다. 코드 예제를 실행하려면 이 소스 코드를 컴파일해야 합니다. 명시적으로 컴파일하고 결과 어셈블리를 웹 사이트의 Bin 폴더 또는 전역 어셈블리 캐시에 넣을 수 있습니다. 또는 런타임에 동적으로 컴파일되는 사이트의 App_Code 폴더에 소스 코드를 배치할 수 있습니다. 이 예제에서는 동적 컴파일을 사용하므로 Register 웹 페이지에서 이러한 구성 요소를 참조하는 지시문은 웹 페이지의 맨 위에 적절하게 선언됩니다. 컴파일 옵션을 보여 주는 연습은 연습: 사용자 지정 웹 서버 컨트롤 개발 및 사용을 참조하세요.

소스 코드에서 메서드를 재정의하는 상속된 컨트롤 MyWebPartManagerDisconnectWebPart 확인합니다. 이 메서드는 페이지의 각 연결을 확인하여 닫히는 컨트롤이 연결에 참여하는지 확인하고, 이 경우 메서드를 DisconnectWebParts 호출하여 연결을 종료합니다. 이는 컨트롤에서 메서드의 기본 구현과 WebPartManager 동일합니다. 재정의된 메서드는 페이지에 메시지를 작성하여 기본 구현을 사용자 지정합니다.

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", "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", "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", "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", "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

코드 예제의 세 번째 부분은 웹 페이지입니다. 맨 위에는 사용자 컨트롤을 등록하는 지시문과 컨트롤을 사용하여 동적으로 컴파일된 어셈블리가 WebPart 포함되어 Register 있습니다. 페이지에는 두 가지 기본 메서드가 있습니다. 메서드는 Button1_Click 컨트롤 간의 연결을 만들고 메서드는 컨트롤의 Button2_Click 연결을 끊습니다.

<%@ 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 Button2_Click(object sender, EventArgs e)
  {
    if (mgr.Connections.Count >= 1 && mgr.Connections[0] != null)
      mgr.DisconnectWebParts(mgr.Connections[0]);
  }
  

</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">
      </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" />
      <asp:Button ID="Button2" runat="server" 
        Text="Disconnect WebPart Controls" 
        OnClick="Button2_Click" />
    </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 mgr As WebPartManager = _
      WebPartManager.GetCurrentWebPartManager(Page)
    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 Button2_Click(ByVal sender as Object, _
    ByVal e as System.EventArgs)
    
    If mgr.Connections.Count >= 1 AndAlso _
      mgr.Connections(0) IsNot Nothing Then
      mgr.DisconnectWebParts(mgr.Connections(0))
    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">
      </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" />
      <asp:Button ID="Button2" runat="server" 
        Text="Disconnect WebPart Controls" 
        OnClick="Button2_Click" />
    </div>
    </form>
</body>
</html>

페이지를 로드한 후 연결 단추를 클릭하여 컨트롤을 연결합니다. 그런 다음 컨트롤 중 하나에서 동사 메뉴(컨트롤 머리글의 아래쪽 화살표)를 클릭하고 동사 메뉴에서 닫기를 선택합니다. 컨트롤을 닫으려고 하면 재정의된 메서드가 호출되고 연결이 종료되고 메시지가 페이지에 기록됩니다. 페이지를 다시 설정하여 닫힌 컨트롤을 복원하고 다른 옵션을 실험하려면 사용자 상태 재설정 링크를 클릭하여 개인 설정 데이터를 제거하고 페이지의 원래 상태를 복원합니다.

설명

DisconnectWebPart 컨트롤이 페이지에서 닫히거나 페이지에서 삭제될 때 웹 파트 컨트롤 집합에 의해 메서드가 내부적으로 호출됩니다. 이러한 시나리오에서 메서드는 소비자 또는 공급자와 관련된 모든 연결에서 컨트롤을 제거하기 위해 호출됩니다. 컨트롤이 연결에서 제거되는 경우 이 메서드는 메서드를 DisconnectWebParts 호출하여 관련된 모든 연결을 종료합니다 webPart .

메서드가 DisconnectWebPart 호출되면 이벤트가 발생합니다 WebPartsDisconnecting . 일반적으로 이 이벤트는 취소할 수 있지만 두 경우 취소할 수 없습니다. 한 가지 사례는 메서드가 호출되는 경우 페이지에 ActivateConnections 대한 요청 중에 발생합니다. 기존 연결 DisconnectWebPart 간에 충돌이 있는 경우 메서드가 호출되어 충돌하는 연결 중 하나를 닫고, 이 instance WebPartsDisconnecting 충돌을 해결해야 하므로 이벤트를 취소할 수 없습니다.

다른 경우는 현재 연결된 또는 서버 컨트롤이 닫히거나 삭제된 경우에 WebPart 발생합니다. 이 경우 컨트롤이 페이지에서 제거되므로 연결을 종료해야 하므로 의도적으로 이벤트를 취소 WebPartsDisconnecting 하여 연결을 종료하는 프로세스를 중단할 수 없습니다. 자세한 내용은 WebPartsDisconnecting 이벤트를 참조하세요.

적용 대상

추가 정보