Freigeben über


WebPartManager.IPersonalizable.IsDirty Eigenschaft

Definition

Ruft einen Wert ab, der angibt, ob mit dem WebPartManager-Steuerelement verwaltete benutzerdefinierte Personalisierungszustandsdaten auf einer Webseite geändert wurden.

property bool System::Web::UI::WebControls::WebParts::IPersonalizable::IsDirty { bool get(); };
bool System.Web.UI.WebControls.WebParts.IPersonalizable.IsDirty { get; }
member this.System.Web.UI.WebControls.WebParts.IPersonalizable.IsDirty : bool
 ReadOnly Property IsDirty As Boolean Implements IPersonalizable.IsDirty

Eigenschaftswert

Ein boolescher Wert, der angibt, ob die Personalisierungszustandsdaten geändert wurden.

Implementiert

Beispiele

Im folgenden Codebeispiel wird eine einfache Verwendung der IPersonalizable.IsDirty -Eigenschaft veranschaulicht, um einige allgemeine Seitenpersonalisierungsinstanzen anzugeben, die dazu führen, dass sich die Personalisierungsdaten eines WebPartManager Steuerelements ändern.

Das Codebeispiel umfasst vier Teile:

  • Ein Benutzersteuerelement, mit dem Sie die Anzeigemodi auf einer Seite ändern können, die Webparts-Steuerelemente enthält.

  • Eine Quelldatei, die den Code für zwei benutzerdefinierte WebPart Steuerelemente enthält, die verbunden werden können, und eine Schnittstelle.

  • Eine Webseite, die alle Steuerelemente hostet.

  • Eine Erläuterung der Funktionsweise des Codebeispiels.

Der erste Teil des Codebeispiels ist das Benutzersteuerelement zum Ändern der Anzeigemodi. Sie können den Quellcode für das Benutzersteuerelement im Abschnitt Beispiel der WebPartManager Klassenübersicht abrufen. Informationen zu Anzeigemodi und zur Funktionsweise des Benutzersteuerelements finden Sie unter Exemplarische Vorgehensweise: Ändern von Anzeigemodi auf einer Webparts-Seite.

Der zweite Teil des Beispiels ist die Quelldatei mit den benutzerdefinierten Steuerelementen und der Schnittstelle. Beachten Sie, dass die IZipCode -Schnittstelle eine Methode verfügbar macht und dass diese Methode, wie im benutzerdefinierten ZipCodeWebPart Steuerelement implementiert, als Rückrufmethode dient, um die Funktion als Anbieter in einem Verbindungsszenario zu ermöglichen ZipCodeWebPart . Das andere Steuerelement fungiert WeatherWebPartals Consumersteuerelement in einer Verbindung. Es kann die bestimmte Schnittstelle nutzen, die von bereitgestellt wird ZipCodeWebPart. In einer echten Anwendung WeatherWebPart könnte ein personalisierter POSTLEITZAHL-Wert des Anbieters verwendet werden und dann grafische Wetterinformationen für Benutzer bereitstellen.

Damit das Codebeispiel ausgeführt werden kann, müssen Sie diesen Quellcode kompilieren. Sie können sie explizit kompilieren und die resultierende Assembly im Ordner Bin ihrer Website oder im globalen Assemblycache ablegen. Alternativ können Sie den Quellcode im Ordner App_Code Ihrer Website ablegen, wo er zur Laufzeit dynamisch kompiliert wird. In diesem Codebeispiel wird die dynamische Kompilierung verwendet. Beachten Sie daher, dass die Register Direktive für diese Komponente oben auf der Webseite nur TagPrefix attribute und Namespace ohne Attribut Assembly enthält. Eine exemplarische Vorgehensweise, die das Kompilieren veranschaulicht, finden Sie unter Exemplarische Vorgehensweise: Entwickeln und Verwenden eines benutzerdefinierten Webserversteuerelements.

namespace Samples.AspNet.CS.Controls
{
  using System;
  using System.Web;
  using System.Web.Security;
  using System.Security.Permissions;
  using System.Web.UI;
  using System.Web.UI.WebControls;
  using System.Web.UI.WebControls.WebParts;

  [AspNetHostingPermission(SecurityAction.Demand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  [AspNetHostingPermission(SecurityAction.InheritanceDemand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  public interface IZipCode
  {
    string ZipCode { get; set;}
  }

  [AspNetHostingPermission(SecurityAction.Demand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  [AspNetHostingPermission(SecurityAction.InheritanceDemand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  public class ZipCodeWebPart : WebPart, IZipCode
  {
    string zipCodeText = String.Empty;
    TextBox input;
    Button send;

    public ZipCodeWebPart()
    {
    }

    // Make the implemented property personalizable to save 
    // the Zip Code between browser sessions.
    [Personalizable()]
    public virtual string ZipCode
    {
      get { return zipCodeText; }
      set { zipCodeText = value; }
    }

    // This is the callback method that returns the provider.
    [ConnectionProvider("Zip Code", "ZipCodeProvider")]
    public IZipCode ProvideIZipCode()
    {
      return this;
    }

    protected override void CreateChildControls()
    {
      Controls.Clear();
      input = new TextBox();
      this.Controls.Add(input);
      send = new Button();
      send.Text = "Enter 5-digit Zip Code";
      send.Click += new EventHandler(this.submit_Click);
      this.Controls.Add(send);
    }

    private void submit_Click(object sender, EventArgs e)
    {
      if (!string.IsNullOrEmpty(input.Text))
      {
        zipCodeText = Page.Server.HtmlEncode(input.Text);
        input.Text = String.Empty;
      }
    }
  }

  [AspNetHostingPermission(SecurityAction.Demand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  [AspNetHostingPermission(SecurityAction.InheritanceDemand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  public class WeatherWebPart : WebPart
  {
    private IZipCode _provider;
    string _zipSearch;
    Label DisplayContent;

    // This method is identified by the ConnectionConsumer 
    // attribute, and is the mechanism for connecting with 
    // the provider. 
    [ConnectionConsumer("Zip Code", "ZipCodeConsumer")]
    public void GetIZipCode(IZipCode Provider)
    {
      _provider = Provider;
    }
    
    protected override void OnPreRender(EventArgs e)
    {
      EnsureChildControls();

      if (this._provider != null)
      {
        _zipSearch = _provider.ZipCode.Trim();
        DisplayContent.Text = "My Zip Code is:  " + _zipSearch;
      }
    }

    protected override void CreateChildControls()
    {
      Controls.Clear();
      DisplayContent = new Label();
      this.Controls.Add(DisplayContent);
    }
  }
}
Imports System.Web
Imports System.Web.Security
Imports System.Security.Permissions
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 Interface IZipCode

    Property ZipCode() As String

  End Interface

  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  Public Class ZipCodeWebPart
    Inherits WebPart
    Implements IZipCode
    Private zipCodeText As String = String.Empty
    Private input As TextBox
    Private send As Button

    Public Sub New()
    End Sub

    ' Make the implemented property personalizable to save 
    ' the Zip Code between browser sessions.
    <Personalizable()> _
    Public Property ZipCode() As String _
      Implements IZipCode.ZipCode

      Get
        Return zipCodeText
      End Get
      Set(ByVal value As String)
        zipCodeText = value
      End Set
    End Property

    ' This is the callback method that returns the provider.
    <ConnectionProvider("Zip Code", "ZipCodeProvider")> _
    Public Function ProvideIZipCode() As IZipCode
      Return Me
    End Function


    Protected Overrides Sub CreateChildControls()
      Controls.Clear()
      input = New TextBox()
      Me.Controls.Add(input)
      send = New Button()
      send.Text = "Enter 5-digit Zip Code"
      AddHandler send.Click, AddressOf Me.submit_Click
      Me.Controls.Add(send)

    End Sub


    Private Sub submit_Click(ByVal sender As Object, _
      ByVal e As EventArgs)

      If input.Text <> String.Empty Then
        zipCodeText = Page.Server.HtmlEncode(input.Text)
        input.Text = String.Empty
      End If

    End Sub

  End Class

  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  Public Class WeatherWebPart
    Inherits WebPart
    Private _provider As IZipCode
    Private _zipSearch As String
    Private DisplayContent As Label

    ' This method is identified by the ConnectionConsumer 
    ' attribute, and is the mechanism for connecting with 
    ' the provider. 
    <ConnectionConsumer("Zip Code", "ZipCodeConsumer")> _
    Public Sub GetIZipCode(ByVal Provider As IZipCode)
      _provider = Provider
    End Sub


    Protected Overrides Sub OnPreRender(ByVal e As EventArgs)
      EnsureChildControls()

      If Not (Me._provider Is Nothing) Then
        _zipSearch = _provider.ZipCode.Trim()
                DisplayContent.Text = "My Zip Code is:  " + _zipSearch
      End If

    End Sub

    Protected Overrides Sub CreateChildControls()
      Controls.Clear()
      DisplayContent = New Label()
      Me.Controls.Add(DisplayContent)

    End Sub

  End Class

End Namespace

Der dritte Teil des Codebeispiels ist die Webseite. Beachten Sie, dass es zwei WebPartZone Zonen enthält, wobei die erste zone die beiden benutzerdefinierten WebPart Steuerelemente enthält. Es gibt auch eine CatalogZone Zone, die ein Standardsteuerelement Calendar enthält, das Benutzer der Seite hinzufügen können. Das <asp:connectionszone> -Element stellt eine Verbindungs-Benutzeroberfläche bereit, mit der Benutzer Verbindungen zwischen Steuerelementen erstellen können. Beachten Sie, dass in der Page_PreRender -Methode überprüft wird, ob sich die Personalisierungsdaten geändert haben, und wenn ja, wird der Text von Label1aktualisiert.

<%@ 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 Page_PreRender(object sender, EventArgs e)
  {
    // Clear the label if it has a previously set value.
    Label1.Text = String.Empty;
    
    // Cast the WebPartManager to the IPersonalizable interface 
    // so that you can access the property.  
    IPersonalizable stateData = (IPersonalizable)mgr1;
    if (stateData.IsDirty)
      Label1.Text = "WebPartManager personalization data is dirty.";
  }
    
  protected void Button1_Click(object sender, EventArgs e)
  {
    ProviderConnectionPoint provPoint = 
      mgr1.GetProviderConnectionPoints(zip1)["ZipCodeProvider"];
    ConsumerConnectionPoint connPoint = 
      mgr1.GetConsumerConnectionPoints(weather1)["ZipCodeConsumer"];
    WebPartConnection conn1 = mgr1.ConnectWebParts(zip1, provPoint,
      weather1, connPoint);
  }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <asp:WebPartManager ID="mgr1" runat="server" />
      <uc1:DisplayModeMenuCS ID="menu1" runat="server" />
      <asp:WebPartZone ID="WebPartZone1" runat="server">
        <ZoneTemplate>
          <aspSample:ZipCodeWebPart ID="zip1" runat="server"
            Title="Zip Code Provider" />
          <aspSample:WeatherWebPart ID="weather1" runat="server" 
            Title="Zip Code Consumer" />
        </ZoneTemplate>
      </asp:WebPartZone>
      <asp:WebPartZone ID="WebPartZone2" runat="server">
        <ZoneTemplate>
        </ZoneTemplate>
      </asp:WebPartZone>
      <asp:CatalogZone ID="CatalogZone1" runat="server">
        <ZoneTemplate>
          <asp:DeclarativeCatalogPart ID="DeclarativeCatalogPart1" 
            runat="server">
            <WebPartsTemplate>
              <asp:Calendar ID="Calendar1" runat="server" 
                Title="My Calendar" />
            </WebPartsTemplate>
          </asp:DeclarativeCatalogPart>
          <asp:PageCatalogPart ID="PageCatalogPart1" runat="server" />
        </ZoneTemplate>
      </asp:CatalogZone>
      <asp:ConnectionsZone ID="ConnectionsZone1" runat="server" />
      <asp:Button ID="Button1" runat="server" 
        Text="Connect WebPart Controls" 
        OnClick="Button1_Click" />
      <hr />
      <asp:Label ID="Label1" runat="server" 
        Text="" 
        Font-Bold="true" />
    </div>
    </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 Page_PreRender(ByVal sender As Object, _
    ByVal e As System.EventArgs)
    
    ' Clear the label if it has a previously set value.
    Label1.Text = String.Empty
    
    ' Cast the WebPartManager to the IPersonalizable interface 
    ' so that you can access the property.
    Dim stateData As IPersonalizable = CType(mgr1, IPersonalizable)
    If stateData.IsDirty Then
      Label1.Text = "WebPartManager personalization data is dirty."
    End If
    
  End Sub
    
  Protected Sub Button1_Click(ByVal sender As Object, _
    ByVal e As System.EventArgs)

    Dim provPoint As ProviderConnectionPoint = _
      mgr1.GetProviderConnectionPoints(zip1)("ZipCodeProvider")
    Dim connPoint As ConsumerConnectionPoint = _
      mgr1.GetConsumerConnectionPoints(weather1)("ZipCodeConsumer")
    Dim conn1 As WebPartConnection = _
      mgr1.ConnectWebParts(zip1, provPoint, weather1, connPoint)
      
  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">
    <div>
      <asp:WebPartManager ID="mgr1" runat="server" />
      <uc1:DisplayModeMenuVB ID="menu1" runat="server" />
      <asp:WebPartZone ID="WebPartZone1" runat="server">
        <ZoneTemplate>
          <aspSample:ZipCodeWebPart ID="zip1" runat="server"
            Title="Zip Code Provider" />
          <aspSample:WeatherWebPart ID="weather1" runat="server" 
            Title="Zip Code Consumer" />
        </ZoneTemplate>
      </asp:WebPartZone>
      <asp:WebPartZone ID="WebPartZone2" runat="server">
        <ZoneTemplate>
        </ZoneTemplate>
      </asp:WebPartZone>
      <asp:CatalogZone ID="CatalogZone1" runat="server">
        <ZoneTemplate>
          <asp:DeclarativeCatalogPart ID="DeclarativeCatalogPart1" 
            runat="server">
            <WebPartsTemplate>
              <asp:Calendar ID="Calendar1" runat="server" 
                Title="My Calendar" />
            </WebPartsTemplate>
          </asp:DeclarativeCatalogPart>
          <asp:PageCatalogPart ID="PageCatalogPart1" runat="server" />
        </ZoneTemplate>
      </asp:CatalogZone>
      <asp:ConnectionsZone ID="ConnectionsZone1" runat="server" />
      <asp:Button ID="Button1" runat="server" 
        Text="Connect WebPart Controls" 
        OnClick="Button1_Click" />
      <hr />
      <asp:Label ID="Label1" runat="server" 
        Text="" 
        Font-Bold="true" />
    </div>
    </form>
</body>
</html>

Nachdem Sie die Seite in einem Browser geladen haben, versuchen Sie, einige der szenarien zu erstellen, die im Abschnitt Hinweise dieses Themas aufgeführt sind und die Personalisierungsdaten ändern. Wenn Sie verschiedene Änderungen vornehmen, wird der Text des Label1 Steuerelements angezeigt, wenn eine Änderung eines der vom WebPartManager Steuerelement nachverfolgten Personalisierungsszenarien umfasst, um anzugeben, dass sich die Personalisierungsdaten geändert haben. Beispielsweise können Sie folgende Aktionen ausführen:

  • Erstellen Sie eine Verbindung zwischen Steuerelementen, indem Sie auf die Schaltfläche WebPart-Steuerelemente verbinden klicken.

  • Verwenden Sie das Dropdownlistensteuerelement Anzeigemodus , um die Seite in den Katalogmodus zu wechseln, und fügen Sie das Steuerelement Mein Kalender der zweiten WebPartZone Zone hinzu.

  • Ändern Sie die Seite zurück in den Suchmodus, klicken Sie auf das Verbenmenü (mit einem Pfeilsymbol in der Titelleiste) für das Steuerelement Mein Kalender , und wählen Sie Schließen aus, um es zu schließen und dem Seitenkatalog hinzuzufügen.

  • Kehren Sie die Seite in den Katalogmodus zurück, und fügen Sie das Steuerelement Mein Kalender wieder zur Seite hinzu.

  • Verwenden Sie das Anzeigemodus-Steuerelement , um die Seite in den Entwurfsmodus zu wechseln, und ordnen Sie das Layout der Steuerelemente neu an, indem Sie ein oder mehrere davon in eine andere Zone oder an eine andere Position in derselben Zone ziehen.

Hinweise

Die IPersonalizable.IsDirty -Eigenschaft bietet Aufrufern eine Möglichkeit, zu bestimmen, ob sich die vom WebPartManager Steuerelement verwalteten Personalisierungszustandsdaten geändert haben. Wenn Benutzer Details auf Seitenebene personalisieren, z. B. durch Ändern des Seitenlayouts, Erstellen oder Löschen von Verbindungen und Hinzufügen oder Löschen von Steuerelementen, ändern sich die vom Steuerelement verwalteten WebPartManager Personalisierungsdaten. Dies ist eine Passthroughmethode, die aufruft den Wert der geschützten IsCustomPersonalizationStateDirty Eigenschaft zurückgibt, auf die Aufrufer nicht direkt zugreifen können.

Hinweis

Die IPersonalizable.IsDirty -Eigenschaft gibt nicht an, ob sich personalisierbare Eigenschaftswerte oder einzelne Eigenschaften, die sich auf die Darstellung einzelner WebPart Steuerelemente auswirken, geändert haben. Die Personalisierung auf Steuerungsebene wird für jedes Steuerelement einzeln nachverfolgt. Die IPersonalizable.IsDirty -Eigenschaft gibt nur an, ob sich Personalisierungsdaten geändert haben, die sich auf Seitenebene befinden und vom WebPartManager Steuerelement verwaltet werden.

In der folgenden Liste werden einige häufige Personalisierungsinstanzen beschrieben, die dazu führen würden, dass die IPersonalizable.IsDirty Eigenschaft den Wert zurückgibt true, was angibt, dass das WebPartManager Steuerelement einige geänderte Personalisierungsdaten aufweist:

  • Schließen eines statischen WebPart Steuerelements (oder Server- oder Benutzersteuerelements) auf einer Seite.

  • Wiederherstellen eines geschlossenen statischen WebPart Steuerelements aus einem Seitenkatalog zurück auf eine Seite.

  • Verschieben eines Steuerelements innerhalb seiner Zone oder in eine andere Zone.

  • Hinzufügen eines Steuerelements aus einem Katalog von WebPart - oder Serversteuerelementen oder programmgesteuertes Hinzufügen eines Steuerelements.

  • Erstellen einer Verbindung zwischen zwei WebPart Steuerelementen, entweder programmgesteuert oder mithilfe der Benutzeroberfläche (Ui) der Verbindung.

  • Löschen einer Verbindung zwischen zwei WebPart Steuerelementen, entweder programmgesteuert oder über die Verbindungsoberfläche.

Um auf diesen Eigenschaftswert zuzugreifen, müssen Sie die WebPartManager Steuerelementinstanz in die IPersonalizable Schnittstelle umwandeln. Sie können dann den IsDirty Eigenschaftswert lesen.

Gilt für:

Weitere Informationen