WebPartManager.CloseWebPart(WebPart) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Fecha um controle WebPart de forma que ele não seja renderizado em uma página da Web, mas que possa ser reaberto.
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
Um WebPart ou controle de servidor que está sendo fechado em uma WebPartZoneBase.
Exceções
webPart
é null
.
webPart
não está na coleção Controls.
- ou -
webPart
é um controle compartilhado e já foi fechado por outro usuário.
Exemplos
O exemplo de código a seguir demonstra como usar o CloseWebPart método .
O exemplo de código tem quatro partes:
Um controle de usuário que permite alterar os modos de exibição de página.
Um controle personalizado WebPart .
Uma página da Web.
Uma explicação de como o exemplo funciona em um navegador.
A primeira parte do exemplo de código é o controle de usuário para alterar os modos de exibição. Você pode obter o código-fonte para o controle do usuário na seção Exemplo da visão geral da WebPartManager classe. Para obter mais informações sobre modos de exibição e como o controle de usuário funciona, consulte Passo a passo: alterando modos de exibição em uma página de Web Parts.
A segunda parte do exemplo de código é o controle personalizado WebPart . Para que o exemplo de código seja executado, você deve compilar esse código-fonte. Você pode compilá-lo explicitamente e colocar o assembly resultante na pasta Bin do seu site ou no cache de assembly global. Como alternativa, você pode colocar o código-fonte na pasta App_Code do site, em que ele será compilado dinamicamente em tempo de execução. Este exemplo usa a abordagem de compilação dinâmica; portanto, não há nenhum Assembly
atributo na Register
diretiva para esse controle na parte superior da página da Web. Para obter um passo a passo que demonstra como compilar, consulte Passo a passo : Desenvolvendo e usando um controle 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
A terceira parte do exemplo de código é a página da Web. A página contém uma CatalogZone zona, com um <asp:pagecatalogpart>
elemento declarado dentro dela. Isso é o que conterá o controle fechado WebPart e permitirá que os usuários o adicionem de volta à página. O Button1_Click
método chama diretamente o CloseWebPart método para fechar o controle personalizado WebPart , embora um usuário também possa fechar o controle por meio do menu de 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>
Depois de carregar a página em um navegador, feche o controle personalizado WebPart clicando no menu de verbos (o símbolo de seta) no cabeçalho do controle e clicando em Fechar. Agora, altere a página para o modo de catálogo selecionando Catálogo no controle de lista suspensa Modo de Exibição . O catálogo de páginas é exibido com o controle fechado. Marque a caixa de seleção ao lado do controle fechado, clique em Adicionar para adicioná-lo à página e clique em Fechar para retornar a página para o modo de navegação. O controle é restaurado para a página. Agora feche-o novamente, desta vez clicando no botão Fechar WebPart .
Comentários
O CloseWebPart método remove um WebPart ou outro controle de servidor para que ele não seja renderizado na página da Web que o continha originalmente. O controle fechado é adicionado a um PageCatalogPart objeto , que mantém uma referência ao controle fechado e possibilita que o controle seja restaurado para a página. Um controle fechado WebPart ainda aparece na coleção referenciada pela WebParts propriedade .
Fechar um controle é diferente de excluí-lo. Os controles fechados ainda estão disponíveis para serem restaurados em uma página, mas uma instância de controle excluída é removida permanentemente e nunca pode ser restaurada. Independentemente de um WebPart controle de servidor ou ser estático (declarado na marcação de uma página) ou dinâmico (adicionado à página programaticamente ou por um usuário de um catálogo de Web Parts), ele pode ser fechado e reaberto em uma página.
Normalmente, os usuários podem fechar um WebPart controle clicando em seu menu de verbos e selecionando o verbo close. Um controle também pode ser fechado chamando diretamente o método e passando-o CloseWebPart uma referência para webPart
.
Em uma página em WebPart que os controles foram fechados, se um desenvolvedor declara um <asp:catalogzone>
elemento e, dentro dele, adiciona um <asp:pagecatalogpart>
elemento, ele fornece uma interface do usuário simples para que os usuários restaurem controles fechados na página em tempo de execução. Os usuários podem alternar a página para o modo de exibição de catálogo e os controles fechados aparecerão no catálogo de páginas. Os usuários podem selecionar controles fechados e adicioná-los de volta à página em qualquer posição desejada e, em seguida, os controles selecionados são restaurados para a página e renderizados normalmente.
Quando o CloseWebPart método é chamado, ele gera vários eventos: WebPartClosing, SelectedWebPartChanging (se houver vários controles) e WebPartsDisconnecting (se houver controles conectados). Normalmente, os desenvolvedores podem cancelar esses eventos, mas em determinados casos não é possível cancelá-los. Para obter detalhes, consulte a documentação dos WebPartClosingeventos , SelectedWebPartChanginge WebPartsDisconnecting .