Sdílet prostřednictvím


WebPartManager.IPersonalizable.IsDirty Vlastnost

Definice

Získá hodnotu, která označuje, zda vlastní personalizace stav data spravované ovládacím WebPartManager prvku změněna na webové stránce.

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

Hodnota vlastnosti

Logická hodnota, která označuje, jestli se změnila data o stavu přizpůsobení.

Implementuje

Příklady

Následující příklad kódu ukazuje jednoduché použití IPersonalizable.IsDirty vlastnosti k označení některých běžných instancí přizpůsobení stránky, které způsobují WebPartManager změnu dat přizpůsobení ovládacího prvku.

Příklad kódu má čtyři části:

  • Uživatelský ovládací prvek, který umožňuje měnit režimy zobrazení na stránce, která obsahuje ovládací prvky webových částí.

  • Zdrojový soubor, který obsahuje kód pro dva vlastní WebPart ovládací prvky, které lze připojit, a rozhraní.

  • Webová stránka, která je hostitelem všech ovládacích prvků.

  • Vysvětlení fungování příkladu kódu

První částí příkladu kódu je uživatelský ovládací prvek pro změnu režimů zobrazení. Zdrojový kód pro uživatelský ovládací prvek můžete získat v části Příklad přehledu WebPartManager třídy. Informace o režimech zobrazení a fungování uživatelského ovládacího prvku najdete v tématu Návod: Změna režimů zobrazení na stránce webových částí.

Druhou částí příkladu je zdrojový soubor s vlastními ovládacími prvky a rozhraním. Všimněte si, že IZipCode rozhraní zveřejňuje jednu metodu a že tato metoda implementovaná ve vlastním ZipCodeWebPart ovládacím prvku slouží jako metoda zpětného volání, která umožňuje ZipCodeWebPart fungovat jako poskytovatel ve scénáři připojení. Druhý ovládací prvek WeatherWebPart, funguje jako ovládací prvek příjemce v připojení; může využívat konkrétní rozhraní poskytované nástrojem ZipCodeWebPart. V reálné aplikaci WeatherWebPart může využívat přizpůsobenou hodnotu PSČ od poskytovatele a pak uživatelům poskytovat grafické informace o počasí.

Aby se příklad kódu spustil, musíte tento zdrojový kód zkompilovat. Můžete ho explicitně zkompilovat a umístit výsledné sestavení do složky Bin webu nebo globální mezipaměti sestavení . Případně můžete zdrojový kód umístit do složky App_Code webu, kde se bude dynamicky kompilovat za běhu. Tento příklad kódu používá dynamickou kompilaci; všimněte si proto, že Register direktiva pro tuto komponentu v horní části webové stránky obsahuje pouze TagPrefix atributy a Namespace bez atributu Assembly . Návod, který ukazuje, jak kompilovat, najdete v tématu Návod: Vývoj a použití vlastního ovládacího prvku webového serveru.

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

Třetí částí příkladu kódu je webová stránka. Všimněte si, že obsahuje dvě WebPartZone zóny, přičemž první z nich obsahuje dva vlastní WebPart ovládací prvky. K dispozici je také CatalogZone zóna, která obsahuje standardní Calendar ovládací prvek, který uživatelé můžou přidat na stránku. Element <asp:connectionszone> poskytuje uživatelské rozhraní pro připojení pro uživatele, aby mohli vytvářet připojení mezi ovládacími prvky. V metodě Page_PreRender si všimněte, že kontroluje, jestli se změnila data přizpůsobení, a pokud ano, aktualizuje text souboru 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>

Po načtení stránky v prohlížeči zkuste vytvořit některé scénáře uvedené v části Poznámky v tomto tématu, které změní data přizpůsobení. Při provádění různých změn, pokud změna zahrnuje jeden ze scénářů přizpůsobení sledovaných ovládacím WebPartManager prvku, zobrazí se text Label1 ovládacího prvku, který označuje, že se změnila data přizpůsobení. Můžete například:

  • Propojení mezi ovládacími prvky vytvoříte kliknutím na tlačítko Připojit ovládací prvky webové části .

  • Pomocí ovládacího prvku rozevíracího seznamu Režim zobrazení přepněte stránku do režimu katalogu a přidejte ovládací prvek Můj kalendář do druhé WebPartZone zóny.

  • Změňte stránku zpět do režimu procházení, klikněte na nabídku sloves (zobrazenou se symbolem šipky v záhlaví) ovládacího prvku Můj kalendář a výběrem možnosti Zavřít ji zavřete a přidejte ji do katalogu stránek.

  • Vraťte stránku do režimu katalogu a přidejte zpět na stránku ovládací prvek Můj kalendář .

  • Pomocí ovládacího prvku Režim zobrazení přepněte stránku do režimu návrhu a změňte uspořádání rozložení ovládacích prvků přetažením jednoho nebo více z nich do jiné zóny nebo na jiné místo ve stejné zóně.

Poznámky

Vlastnost IPersonalizable.IsDirty poskytuje volajícím způsob, jak zjistit, zda se změnila data stavu přizpůsobení spravovaná ovládacím WebPartManager prostředkem. Když si uživatelé přizpůsobí podrobnosti na úrovni stránky, například změnou rozložení stránky, vytvořením nebo odstraněním připojení a přidáním nebo odstraněním ovládacích prvků, data přizpůsobení spravovaná ovládacím WebPartManager prvek se změní. Jedná se o průchozí metodu, která volajícím vrací hodnotu chráněné IsCustomPersonalizationStateDirty vlastnosti, ke které volající nemají přímý přístup.

Poznámka

Vlastnost IPersonalizable.IsDirty neuvádí, zda se změnily hodnoty přizpůsobitelné vlastnosti nebo jednotlivé vlastnosti, které mají vliv na vzhled jednotlivých WebPart ovládacích prvků. Individuální nastavení na úrovni ovládacích prvků se sleduje pro každý ovládací prvek zvlášť. Vlastnost IPersonalizable.IsDirty označuje pouze to, jestli se změnila data přizpůsobení, která jsou na úrovni stránky a jsou spravována ovládacím WebPartManager prvku.

Následující seznam popisuje některé běžné instance přizpůsobení, které by způsobily IPersonalizable.IsDirty , že vlastnost vrátí hodnotu true, což znamená, že WebPartManager ovládací prvek má některá změněná data přizpůsobení:

  • Zavření statického WebPart ovládacího prvku (nebo serveru nebo uživatelského ovládacího prvku) na stránce.

  • Obnovení uzavřeného statického WebPart ovládacího prvku z katalogu stránek zpět na stránku

  • Přesun jakéhokoli ovládacího prvku v rámci své zóny nebo do jiné zóny.

  • Přidání ovládacího prvku z katalogu nebo serverových ovládacích WebPart prvků nebo přidání ovládacího prvku prostřednictvím kódu programu

  • Vytvoření připojení mezi dvěma WebPart ovládacími prvky, buď prostřednictvím kódu programu, nebo pomocí uživatelského rozhraní (UI) připojení.

  • Odstraňuje se propojení mezi dvěma WebPart ovládacími prvky, buď prostřednictvím kódu programu, nebo pomocí uživatelského rozhraní připojení.

Pokud chcete získat přístup k této hodnotě vlastnosti, musíte přetypovat WebPartManager instanci ovládacího prvku do IPersonalizable rozhraní; pak můžete číst IsDirty hodnotu vlastnosti.

Platí pro

Viz také