WebPartManager.IPersonalizable.IsDirty Vlastnost
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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.