Udostępnij za pośrednictwem


WebPartManager.CloseWebPart(WebPart) Metoda

Definicja

Zamyka kontrolkę WebPart w taki sposób, aby nie była renderowana na stronie sieci Web, ale można ją ponownie otworzyć.

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)

Parametry

webPart
WebPart

Kontrolka WebPart serwera lub, która jest zamykana w obiekcie WebPartZoneBase.

Wyjątki

webPart to null.

webPart nie znajduje się w kolekcji Controls .

-lub-

webPart jest udostępnioną kontrolką i została już zamknięta przez innego użytkownika.

Przykłady

W poniższym przykładzie kodu pokazano, jak używać CloseWebPart metody .

Przykładowy kod ma cztery części:

  • Kontrolka użytkownika, która umożliwia zmianę trybów wyświetlania strony.

  • Kontrolka niestandardowa WebPart .

  • Strona sieci Web.

  • Wyjaśnienie działania przykładu w przeglądarce.

Pierwszą częścią przykładu kodu jest kontrolka użytkownika do zmieniania trybów wyświetlania. Kod źródłowy kontrolki użytkownika można uzyskać w sekcji Przykład w przeglądzie WebPartManager klasy. Aby uzyskać więcej informacji na temat trybów wyświetlania i sposobu działania kontrolki użytkownika, zobacz Przewodnik: zmienianie trybów wyświetlania na stronie składników Web Part.

Drugą częścią przykładu kodu jest kontrolka niestandardowa WebPart . Aby można było uruchomić przykładowy kod, należy skompilować ten kod źródłowy. Można je skompilować jawnie i umieścić wynikowy zestaw w folderze Bin witryny sieci Web lub globalnej pamięci podręcznej zestawów. Alternatywnie można umieścić kod źródłowy w folderze App_Code witryny, w którym będzie dynamicznie kompilowany w czasie wykonywania. W tym przykładzie użyto metody kompilacji dynamicznej; w dyrektywie nie Assembly ma atrybutu Register dla tej kontrolki w górnej części strony sieci Web. Aby zapoznać się z przewodnikiem, który pokazuje sposób kompilowania, zobacz Przewodnik: tworzenie i używanie niestandardowej kontrolki serwera sieci 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

Trzecią częścią przykładu kodu jest strona internetowa. Strona zawiera strefę CatalogZone z elementem zadeklarowanym <asp:pagecatalogpart> w niej. Będzie to zawierać zamkniętą WebPart kontrolkę i umożliwić użytkownikom dodawanie jej z powrotem do strony. Metoda Button1_Click bezpośrednio wywołuje metodę CloseWebPart , aby zamknąć kontrolkę niestandardową WebPart , chociaż użytkownik może również zamknąć kontrolkę za pomocą menu czasowników.

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

Po załadowaniu strony w przeglądarce zamknij kontrolkę niestandardową WebPart , klikając menu czasowników (symbol strzałki) w nagłówku kontrolki i klikając przycisk Zamknij. Teraz zmień stronę na tryb wykazu, wybierając pozycję Wykaz w kontrolce listy rozwijanej Tryb wyświetlania . Wykaz stron zostanie wyświetlony z zamkniętą kontrolką. Zaznacz pole wyboru obok zamkniętej kontrolki, kliknij przycisk Dodaj , aby dodać ją do strony, a następnie kliknij przycisk Zamknij , aby zwrócić stronę do trybu przeglądania. Kontrolka zostanie przywrócona do strony. Teraz zamknij go ponownie, tym razem klikając przycisk Zamknij składnik Web Part .

Uwagi

Metoda CloseWebPart usuwa kontrolkę WebPart serwera lub inną, aby nie była renderowana na stronie sieci Web, która pierwotnie ją zawierała. Zamknięta kontrolka jest dodawana do PageCatalogPart obiektu, który utrzymuje odwołanie do zamkniętej kontrolki i umożliwia przywrócenie kontrolki do strony. Zamknięta WebPart kontrolka nadal pojawia się w kolekcji, do których WebParts odwołuje się właściwość .

Zamykanie kontrolki różni się od jej usuwania. Zamknięte kontrolki są nadal dostępne do przywrócenia do strony, ale usunięte wystąpienie kontrolki jest trwale usuwane i nigdy nie można go przywrócić. Niezależnie od tego, czy kontrolka WebPart serwera lub jest statyczna (zadeklarowana w znacznikach strony) lub dynamiczna (dodawana programowo do strony lub przez użytkownika z katalogu składników Web Part), można ją zamknąć i ponownie otworzyć na stronie.

Zazwyczaj użytkownicy mogą zamknąć kontrolkę WebPart , klikając menu czasowników i wybierając czasownik zamknij. Kontrolkę można również zamknąć przez bezpośrednie wywołanie CloseWebPart metody i przekazanie odwołania do webPartmetody .

Na stronie, na której WebPart zostały zamknięte kontrolki, jeśli deweloper deklaruje <asp:catalogzone> element, a w nim dodaje <asp:pagecatalogpart> element, udostępnia prosty interfejs użytkownika (UI) dla użytkowników w celu przywrócenia zamkniętych kontrolek do strony w czasie wykonywania. Użytkownicy mogą przełączyć stronę do trybu wyświetlania wykazu, a zamknięte kontrolki będą wyświetlane w katalogu stron. Użytkownicy mogą wybierać zamknięte kontrolki i dodawać je z powrotem do strony w dowolnej żądanej pozycji, a następnie wybrane kontrolki są przywracane do strony i renderowane w zwykły sposób.

CloseWebPart Gdy metoda jest wywoływana, zgłasza kilka zdarzeń: WebPartClosing, SelectedWebPartChanging (jeśli istnieje wiele kontrolek) i WebPartsDisconnecting (jeśli istnieją połączone kontrolki). Zwykle deweloperzy mogą anulować te zdarzenia, ale w niektórych przypadkach nie można ich anulować. Aby uzyskać szczegółowe informacje, zobacz dokumentację zdarzeń WebPartClosing, SelectedWebPartChangingi WebPartsDisconnecting .

Dotyczy

Zobacz też