다음을 통해 공유


WebPartManager.CloseWebPart(WebPart) 메서드

정의

WebPart 컨트롤을 닫습니다. 닫힌 컨트롤은 웹 페이지에 렌더링되지 않지만 다시 열 수 있습니다.

public:
 void CloseWebPart(System::Web::UI::WebControls::WebParts::WebPart ^ webPart);
public void CloseWebPart (System.Web.UI.WebControls.WebParts.WebPart webPart);
member this.CloseWebPart : System.Web.UI.WebControls.WebParts.WebPart -> unit
Public Sub CloseWebPart (webPart As WebPart)

매개 변수

webPart
WebPart

WebPart에서 닫을 WebPartZoneBase 또는 서버 컨트롤입니다.

예외

webPart이(가) null인 경우

webPartControls 컬렉션에 없는 경우

또는

webPart가 공유 컨트롤이고 다른 사용자에 의해 이미 닫힌 경우

예제

다음 코드 예제에서는 CloseWebPart 메서드를 사용하는 방법을 보여 줍니다.

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

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

  • 사용자 지정 WebPart 컨트롤입니다.

  • 웹 페이지입니다.

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

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

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

using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Security.Permissions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

namespace Samples.AspNet.CS.Controls
{
  [AspNetHostingPermission(SecurityAction.Demand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  [AspNetHostingPermission(SecurityAction.InheritanceDemand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  public class TextDisplayWebPart : WebPart
  {
    private String _contentText = null;
    TextBox input;
    Label DisplayContent;
    Literal lineBreak;

    [Personalizable(), WebBrowsable]
    public String ContentText
    {
      get { return _contentText; }
      set { _contentText = value; }
    }

    protected override void CreateChildControls()
    {
      Controls.Clear();
      DisplayContent = new Label();
      DisplayContent.BackColor = Color.LightBlue;
      DisplayContent.Text = this.ContentText;
      this.Controls.Add(DisplayContent);

      lineBreak = new Literal();
      lineBreak.Text = @"<br />";
      Controls.Add(lineBreak);

      input = new TextBox();
      this.Controls.Add(input);
      Button update = new Button();
      update.Text = "Set Label Content";
      update.Click += new EventHandler(this.submit_Click);
      this.Controls.Add(update);
    }

    private void submit_Click(object sender, EventArgs e)
    {
      // Update the label string.
      if (!string.IsNullOrEmpty(input.Text))
      {
        _contentText = input.Text + @"<br />";
        input.Text = String.Empty;
        DisplayContent.Text = this.ContentText;
      }
    }
  }
}
Imports System.Collections
Imports System.ComponentModel
Imports System.Drawing
Imports System.Security.Permissions
Imports System.Web
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 Class TextDisplayWebPart
    Inherits WebPart
    Private _contentText As String = Nothing
    Private _fontStyle As String = Nothing
    Private input As TextBox
    Private DisplayContent As Label
    Private lineBreak As Literal

    <Personalizable(), WebBrowsable()> _
    Public Property ContentText() As String
      Get
        Return _contentText
      End Get
      Set(ByVal value As String)
        _contentText = value
      End Set
    End Property

    Protected Overrides Sub CreateChildControls()
      Controls.Clear()
      DisplayContent = New Label()
      DisplayContent.BackColor = Color.LightBlue
      DisplayContent.Text = Me.ContentText
      Me.Controls.Add(DisplayContent)

      lineBreak = New Literal()
      lineBreak.Text = "<br />"
      Controls.Add(lineBreak)

      input = New TextBox()
      Me.Controls.Add(input)
      Dim update As New Button()
      update.Text = "Set Label Content"
      AddHandler update.Click, AddressOf Me.submit_Click
      Me.Controls.Add(update)

    End Sub

    Private Sub submit_Click(ByVal sender As Object, _
                             ByVal e As EventArgs)
      ' Update the label string.
      If input.Text <> String.Empty Then
        _contentText = input.Text + "<br />"
        input.Text = String.Empty
        DisplayContent.Text = Me.ContentText
      End If

    End Sub

  End Class

End Namespace

코드 예제의 세 번째 부분은 웹 페이지입니다. 페이지에는 요소가 선언된 영역 <asp:pagecatalogpart> 이 포함되어 CatalogZone 있습니다. 이는 닫힌 WebPart 컨트롤을 포함하고 사용자가 페이지에 다시 추가할 수 있도록 하는 것입니다. 메서드는 Button1_Click 메서드를 CloseWebPart 직접 호출하여 사용자 지정 WebPart 컨트롤을 닫지만 사용자는 동사 메뉴를 통해 컨트롤을 닫을 수도 있습니다.

<%@ 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)
  {
    mgr1.CloseWebPart(text1);
  }
  
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
      <asp:WebPartManager ID="mgr1" runat="server" />
      <uc1:DisplayModeMenuCS ID="menu1" runat="server" />
      <asp:WebPartZone ID="WebPartZone1" runat="server">
        <ZoneTemplate>
          <aspSample:TextDisplayWebPart ID="text1" 
            runat="server" 
            Title="My Text WebPart" />
        </ZoneTemplate>
      </asp:WebPartZone>
      <asp:CatalogZone ID="CatalogZone1" runat="server">
        <ZoneTemplate>
          <asp:PageCatalogPart ID="PageCatalogPart1" runat="server" />   
        </ZoneTemplate>
      </asp:CatalogZone>
      <asp:Button ID="Button1" runat="server" 
        Text="Close WebPart" 
        OnClick="Button1_Click" />
    </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)
    
    mgr1.CloseWebPart(text1)

  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">
      <asp:WebPartManager ID="mgr1" runat="server" />
      <uc1:DisplayModeMenuVB ID="menu1" runat="server" />
      <asp:WebPartZone ID="WebPartZone1" runat="server">
        <ZoneTemplate>
          <aspSample:TextDisplayWebPart ID="text1" 
            runat="server" 
            Title="My Text WebPart" />
        </ZoneTemplate>
      </asp:WebPartZone>
      <asp:CatalogZone ID="CatalogZone1" runat="server">
        <ZoneTemplate>
          <asp:PageCatalogPart ID="PageCatalogPart1" runat="server" />   
        </ZoneTemplate>
      </asp:CatalogZone>
      <asp:Button ID="Button1" runat="server" 
        Text="Close WebPart" 
        OnClick="Button1_Click" />
    </form>
</body>
</html>

브라우저에서 페이지를 로드한 후 컨트롤의 머리글에서 동사 메뉴(화살표 기호)를 클릭하고 닫기를 클릭하여 사용자 지정 WebPart 컨트롤을 닫습니다. 이제 표시 모드 드롭다운 목록 컨트롤에서 카탈로그 를 선택하여 페이지를 카탈로그 모드 로 변경합니다. 닫힌 컨트롤과 함께 페이지 카탈로그가 나타납니다. 닫힌 컨트롤 옆에 있는 확인란을 선택하고 추가 를 클릭하여 페이지에 추가한 다음 닫기를 클릭하여 페이지를 반환하여 모드를 찾습니다. 컨트롤이 페이지로 복원됩니다. 이제 WebPart 닫기 단추를 클릭하여 이번에는 다시 닫습니다.

설명

메서드는 CloseWebPartWebPart 원래 포함된 웹 페이지에서 렌더링되지 않도록 또는 다른 서버 컨트롤을 제거합니다. 닫힌 컨트롤은 닫힌 컨트롤에 PageCatalogPart 대한 참조를 유지하고 컨트롤을 페이지로 복원할 수 있도록 하는 개체에 추가됩니다. 닫힌 WebPart 컨트롤은 속성에서 참조하는 컬렉션에 WebParts 계속 나타납니다.

컨트롤을 닫는 것은 컨트롤을 삭제하는 경우와 다릅니다. 닫힌 컨트롤은 여전히 페이지로 복원할 수 있지만 삭제된 컨트롤 인스턴스는 영구적으로 제거되며 복원할 수 없습니다. WebPart 또는 서버 컨트롤이 정적(페이지 태그에 선언됨) 또는 동적(프로그래밍 방식으로 페이지에 추가되거나 웹 파트 카탈로그의 사용자가 추가됨)에 관계없이 페이지에서 닫고 다시 열 수 있습니다.

일반적으로 사용자는 동사 메뉴를 클릭하고 닫 WebPart 기 동사를 선택하여 컨트롤을 닫을 수 있습니다. 메서드를 직접 호출하고 에 대한 참조webPart를 전달하여 컨트롤을 CloseWebPart 닫을 수도 있습니다.

컨트롤이 닫힌 페이지에서 개발자가 WebPart 요소를 선언 <asp:catalogzone> 하고 그 안에 요소를 추가하는 <asp:pagecatalogpart> 경우 사용자가 런타임에 닫힌 컨트롤을 페이지에 복원할 수 있는 간단한 UI(사용자 인터페이스)를 제공합니다. 사용자는 페이지를 카탈로그 표시 모드로 전환할 수 있으며, 닫힌 컨트롤이 페이지 카탈로그 내에 표시됩니다. 사용자는 닫힌 컨트롤을 선택하고 원하는 위치에 페이지에 다시 추가한 다음 선택한 컨트롤이 페이지로 복원되고 정상적으로 렌더링됩니다.

메서드가 CloseWebPart 호출되면 , SelectedWebPartChanging (여러 컨트롤이 있는 경우) 및 WebPartsDisconnecting (연결된 컨트롤이 있는 경우) 여러 이벤트가 발생WebPartClosing합니다. 일반적으로 개발자는 이러한 이벤트를 취소할 수 있지만 경우에 따라 취소할 수 없습니다. 자세한 내용은 , SelectedWebPartChangingWebPartsDisconnecting 이벤트에 대한 WebPartClosing설명서를 참조하세요.

적용 대상

추가 정보