Compartilhar via


WebPartManager.CloseWebPart(WebPart) Método

Definição

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 .

Aplica-se a

Confira também