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

Boolean

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.

Im Codebeispiel sind vier Teile enthalten:

  • Ein Benutzersteuerelement, mit dem Sie 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, auf der alle Steuerelemente gehostet werden.

  • Eine Erklärung darüber, wie das Codebeispiel funktioniert.

Der erste Teil des Codebeispiels ist das Benutzersteuerelement für die Änderung von Anzeigemodi. Sie können den Quellcode für das Benutzersteuerelement aus dem Beispielabschnitt der WebPartManager Klassenübersicht abrufen. Informationen zu Anzeigemodi und der 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 ZipCodeWebPart einen Anbieter in einem Verbindungsszenario zu verwenden. Das andere Steuerelement, fungiert als Verbrauchersteuerelement in einer Verbindung; er kann die bestimmte Schnittstelle nutzen, WeatherWebPartdie von ZipCodeWebPart. In einer echten Anwendung WeatherWebPart könnte ein personalisierter POSTLEITZAHL-Wert vom Anbieter verwendet werden und dann grafische Wetterinformationen für Benutzer bereitstellen.

Zum Ausführen des Codebeispiels müssen Sie diesen Quellcode kompilieren. Sie können es explizit kompilieren und die resultierende Assembly in den Bin-Ordner Ihrer Website oder den globalen Assemblycache einfügen. Alternativ können Sie den Quellcode in den App_Code Ordner Ihrer Website einfügen, wo sie zur Laufzeit dynamisch kompiliert wird. In diesem Codebeispiel wird die dynamische Kompilierung verwendet; Beachten Sie daher, dass die Register Richtlinie für diese Komponente oben auf der Webseite nur TagPrefix und Namespace Attribute enthält, ohne ein Assembly Attribut. Eine exemplarische Vorgehensweise zum Kompilieren 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 Zonen enthält, wobei der erste mit den beiden WebPartZone benutzerdefinierten WebPart Steuerelementen enthalten ist. Es gibt auch eine Zone, die ein CatalogZone Standardsteuerelement Calendar enthält, das Benutzern die Seite hinzufügen kann. Das <asp:connectionszone> Element bietet eine Verbindungsoberfläche für Benutzer, um Verbindungen zwischen Steuerelementen zu erstellen. Beachten Sie in der Page_PreRender Methode, dass sie überprüft, ob sich die Personalisierungsdaten geändert haben und falls ja, den Text von Label1.

<%@ 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, das die Personalisierungsdaten ändert. Wenn Sie verschiedene Änderungen vornehmen, wenn eine Änderung eine der vom Steuerelement nachverfolgten Personalisierungsszenarien WebPartManager umfasst, wird der Text des Label1 Steuerelements angezeigt, um anzugeben, dass Personalisierungsdaten geändert wurden. Beispielsweise können Sie folgende Aktionen ausführen:

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

  • Verwenden Sie das Dropdown-Listensteuerelement für den Anzeigemodus , um die Seite zum Katalogmodus zu wechseln, und fügen Sie das Steuerelement "Mein Kalender " zur zweiten WebPartZone Zone hinzu.

  • Ändern Sie die Seite zurück zum Durchsuchenmodus, klicken Sie im Menü "Verben" (mit einem Pfeilsymbol in der Titelleiste) für das Steuerelement " Mein Kalender " und wählen Sie "Schließen" aus, um ihn zu schließen und dem Seitenkatalog hinzuzufügen.

  • Geben Sie die Seite zum Katalogmodus zurück, und fügen Sie das Steuerelement "Mein Kalender " zur Seite hinzu.

  • Verwenden Sie das Anzeigemodus-Steuerelement , um das Zeichenblatt im Entwurfsmodus zu wechseln und das Layout der Steuerelemente neu anzuordnen, indem Sie eine oder mehrere davon in eine andere Zone ziehen oder eine andere Position in derselben Zone haben.

Hinweise

Die IPersonalizable.IsDirty Eigenschaft bietet eine Möglichkeit für Anrufer, zu bestimmen, ob Personalisierungsstatusdaten, die vom WebPartManager Steuerelement verwaltet werden, geändert wurden. Wenn Benutzer Seitenebenendetails personalisieren, z. B. durch Ändern des Seitenlayouts, Erstellen oder Löschen von Verbindungen und Hinzufügen oder Löschen von Steuerelementen, ändert sich die durch das WebPartManager Steuerelement verwalteten Personalisierungsdaten. Dies ist eine Pass-Through-Methode, die aufrufer den Wert der geschützten IsCustomPersonalizationStateDirty Eigenschaft zurückgibt, auf die nicht direkt von Anrufern zugegriffen werden kann.

Hinweis

Die IPersonalizable.IsDirty Eigenschaft gibt nicht an, ob persönliche Eigenschaftenwerte oder einzelne Eigenschaften, die sich auf das Aussehen einzelner WebPart Steuerelemente auswirken, geändert wurden. Die Personalisierung auf Steuerelementebene wird für jedes Steuerelement einzeln nachverfolgt. Die IPersonalizable.IsDirty Eigenschaft gibt nur an, ob Personalisierungsdaten auf Seitenebene und durch das WebPartManager Steuerelement geändert wurden.

In der folgenden Liste werden einige allgemeine Instanzen der Personalisierung beschrieben, die dazu führen würden, dass die Eigenschaft einen Wert truezurückgibt, der angibt, dass das IPersonalizable.IsDirty WebPartManager Steuerelement einige geänderte Personalisierungsdaten aufweist:

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

  • Wiederherstellen eines geschlossenen statischen WebPart Steuerelements aus einem Seitenkatalog zurück zu einer Seite.

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

  • Hinzufügen eines Steuerelements aus einem Katalog von WebPart oder Serversteuerelementen oder hinzufügen eines Steuerelements programmgesteuert.

  • Erstellen einer Verbindung zwischen zwei WebPart Steuerelementen, entweder programmgesteuert oder mithilfe der Verbindungsschnittstelle (UI).

  • Löschen einer Verbindung zwischen zwei WebPart Steuerelementen, entweder programmgesteuert oder mithilfe der Verbindungsoberflächen.

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

Gilt für

Siehe auch