WebPartManager.CloseWebPart(WebPart) Método

Definición

Cierra un control WebPart de manera que no se representa en una página Web, pero se puede volver a abrir.

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)

Parámetros

webPart
WebPart

Control WebPart o control de servidor que se cierra en una zona WebPartZoneBase.

Excepciones

webPart es null.

webPart no está en la colección de Controls.

o bien

webPart es un control compartido y ya lo ha cerrado otro usuario.

Ejemplos

En el ejemplo de código siguiente se muestra cómo utilizar el método CloseWebPart.

El ejemplo de código tiene cuatro partes:

  • Control de usuario que permite cambiar los modos de visualización de página.

  • Un control personalizado WebPart .

  • Una página web.

  • Explicación de cómo funciona el ejemplo en un explorador.

La primera parte del ejemplo de código es el control de usuario para cambiar los modos de visualización. Puede obtener el código fuente del control de usuario en la sección Ejemplo de la información general de la WebPartManager clase. Para obtener más información sobre los modos de visualización y cómo funciona el control de usuario, vea Tutorial: Cambiar modos de presentación en una página de elementos web.

La segunda parte del ejemplo de código es el control personalizado WebPart . Para que se ejecute el ejemplo de código, debe compilar este código fuente. Puede compilarlo explícitamente y colocar el ensamblado resultante en la carpeta Bin del sitio web o en la caché global de ensamblados. Como alternativa, puede colocar el código fuente en la carpeta App_Code del sitio, donde se compilará dinámicamente en tiempo de ejecución. En este ejemplo se usa el enfoque de compilación dinámica; por lo tanto, no hay ningún Assembly atributo en la Register directiva para este control en la parte superior de la página web. Para ver un tutorial que muestra cómo compilar, consulte Tutorial: Desarrollo y uso de un control de servidor web personalizado.

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

La tercera parte del ejemplo de código es la página web. La página contiene una CatalogZone zona, con un <asp:pagecatalogpart> elemento declarado dentro de ella. Esto es lo que contendrá el control cerrado WebPart y permitirá a los usuarios volver a agregarlo a la página. El Button1_Click método llama directamente al CloseWebPart método para cerrar el control personalizado WebPart , aunque un usuario también puede cerrar el control a través del menú verbos.

<%@ 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>

Después de cargar la página en un explorador, cierre el control personalizado WebPart haciendo clic en el menú verbos (el símbolo de flecha) en el encabezado del control y haciendo clic en Cerrar. Ahora cambie la página al modo de catálogo seleccionando Catálogo en el control de lista desplegable Modo de visualización. El catálogo de páginas aparece con el control cerrado. Active la casilla situada junto al control cerrado, haga clic en Agregar para agregarla a la página y, a continuación, haga clic en Cerrar para devolver la página para examinar el modo. El control se restaura en la página. Ahora vuelva a cerrarlo, esta vez haciendo clic en el botón Cerrar elemento web .

Comentarios

El CloseWebPart método quita un WebPart control de servidor u otro para que no se represente en la página web que lo contenía originalmente. El control cerrado se agrega a un PageCatalogPart objeto , que mantiene una referencia al control cerrado y permite restaurar el control en la página. Un control cerrado WebPart sigue apareciendo en la colección a la que hace referencia la WebParts propiedad .

Cerrar un control es diferente de eliminarlo. Los controles cerrados siguen estando disponibles para restaurarse en una página, pero una instancia de control eliminada se quita permanentemente y nunca se puede restaurar. Independientemente de si un WebPart control de servidor o es estático (declarado en el marcado de una página) o dinámico (agregado a la página mediante programación o por un usuario de un catálogo de elementos web), se puede cerrar y volver a abrir en una página.

Normalmente, los usuarios pueden cerrar un WebPart control haciendo clic en su menú verbos y seleccionando el verbo close. También se puede cerrar un control llamando directamente al CloseWebPart método y pasando una referencia a webPart.

En una página en WebPart la que se han cerrado los controles, si un desarrollador declara un <asp:catalogzone> elemento y, dentro de él, agrega un <asp:pagecatalogpart> elemento, proporciona una interfaz de usuario simple (UI) para que los usuarios restaure los controles cerrados a la página en tiempo de ejecución. Los usuarios pueden cambiar la página al modo de presentación del catálogo y los controles cerrados aparecerán dentro del catálogo de páginas. Los usuarios pueden seleccionar controles cerrados y volver a agregarlos a la página en la posición que deseen y, a continuación, los controles seleccionados se restauran en la página y se representan como normales.

Cuando se llama al CloseWebPart método , genera varios eventos: WebPartClosing, SelectedWebPartChanging (si hay varios controles) y WebPartsDisconnecting (si hay controles conectados). Normalmente, los desarrolladores pueden cancelar estos eventos, pero en ciertos casos no es posible cancelarlos. Para obtener más información, consulte la documentación de los WebPartClosingeventos , SelectedWebPartChangingy WebPartsDisconnecting .

Se aplica a

Consulte también