WebPartManager.CloseWebPart(WebPart) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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 presentació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 presentació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 presentación y cómo funciona el control de usuario, vea Walkthrough: Changing Display Modes on a Web Parts Page.
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, vea 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 presentació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 al modo de exploración. 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 la contenía originalmente. El control cerrado se agrega a un PageCatalogPart objeto , que mantiene una referencia al control cerrado y permite que el control se restaure 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 o de servidor 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ú de verbos y seleccionando el verbo close. Un control también se puede cerrar 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 .