WebPartManager.CloseWebPart(WebPart) メソッド

定義

Web ページ上に表示されなくても再度開くことができる方法で 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 コントロールまたはサーバー コントロール。

例外

webPartnullです。

webPartControls コレクション内にありません。

- または -

webPart は共有コントロールで、別のユーザーによって既に終了されています。

次のコード例は、CloseWebPart メソッドの使用方法を示します。

このコード例には、次の 4 つの部分があります。

  • ページ表示モードを変更できるユーザー コントロール。

  • カスタム WebPart コントロール。

  • Web ページ。

  • ブラウザーでのこの例の動作の説明。

コード例の最初の部分は、表示モードを変更するためのユーザー コントロールです。 ユーザー コントロールのソース コードは、クラスの概要の [例] セクション WebPartManager から取得できます。 表示モードとユーザー コントロールの動作の詳細については、「 チュートリアル: Web パーツ ページでの表示モードの変更」を参照してください。

コード例の 2 番目の部分は、カスタム WebPart コントロールです。 コード例を実行するには、このソース コードをコンパイルする必要があります。 明示的にコンパイルし、結果のアセンブリを Web サイトの Bin フォルダーまたはグローバル アセンブリ キャッシュに配置できます。 または、ソース コードをサイトの App_Code フォルダーに配置して、実行時に動的にコンパイルすることもできます。 この例では、動的コンパイル アプローチを使用します。したがって、このコントロールのRegisterディレクティブには、Web ページの上部に属性はありませんAssembly。 コンパイル方法を示すチュートリアルについては、「 チュートリアル: カスタム Web サーバー コントロールの開発と使用」を参照してください。

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

コード例の 3 番目の部分は Web ページです。 ページにはゾーンが CatalogZone 含まれています。その中に <asp:pagecatalogpart> 要素が宣言されています。 これは、閉じた 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 コントロールを 閉じます。 次に、[表示モード] ドロップダウン リスト コントロールで [ カタログ ] を選択して、ページをカタログ モード に変更します。 閉じたコントロールと共にページ カタログが表示されます。 閉じたコントロールの横にあるチェック ボックスをオンにし、[ 追加 ] をクリックしてページに追加し、[ 閉じる ] をクリックしてページを参照モードに戻します。 コントロールがページに復元されます。 ここでもう一度閉じます。今度は [ Web パーツを閉じる ] ボタンをクリックします。

注釈

メソッドは CloseWebPart 、 または他の WebPart サーバー コントロールを削除して、最初に含まれていた Web ページにレンダリングされないようにします。 閉じたコントロールが オブジェクトに PageCatalogPart 追加され、閉じたコントロールへの参照が維持され、コントロールをページに復元できるようになります。 閉じた WebPart コントロールは、 プロパティによって参照されるコレクションに WebParts 引き続き表示されます。

コントロールを閉じると、コントロールを削除するのとは異なります。 閉じたコントロールは引き続きページに復元できますが、削除されたコントロール インスタンスは完全に削除され、復元することはできません。 または サーバー コントロールが静的 (ページのマークアップで宣言) であるか動的であるか (プログラムによってページに追加されるか、Web パーツ カタログのユーザーによって追加される) かに WebPart 関係なく、ページ上で閉じて再度開くことができます。

通常、ユーザーは動詞メニューを WebPart クリックして閉じる動詞を選択することで、コントロールを閉じることができます。 コントロールは、 メソッドを直接呼び出し、 CloseWebPart への webPart参照を渡すことで閉じることもできます。

コントロールが閉じられているページで、開発者が WebPart 要素を <asp:catalogzone> 宣言し、その中に要素を <asp:pagecatalogpart> 追加すると、ユーザーが実行時に閉じたコントロールをページに復元するための単純なユーザー インターフェイス (UI) が提供されます。 ユーザーはページをカタログ表示モードに切り替えることができます。閉じたコントロールはページ カタログ内に表示されます。 ユーザーは閉じたコントロールを選択し、任意の位置でページに追加し直すと、選択したコントロールがページに復元され、通常どおりにレンダリングされます。

メソッドがCloseWebPart呼び出されると、いくつかのイベント WebPartClosingSelectedWebPartChanging (複数のコントロールがある場合)、および WebPartsDisconnecting (接続されたコントロールがある場合) が発生します。 通常、開発者はこれらのイベントを取り消すことができますが、場合によっては取り消すことができません。 詳細については、および イベントのドキュメントをWebPartClosingSelectedWebPartChangingWebPartsDisconnecting参照してください。

適用対象

こちらもご覧ください