ITrackingPersonalizable Interfaccia

Definizione

Consente ai controlli Web part di tenere traccia delle fasi specifiche del processo di caricamento e salvataggio delle personalizzazioni.Allows Web Parts controls to track the specific phases of the personalization load and save process.

public interface class ITrackingPersonalizable
public interface ITrackingPersonalizable
type ITrackingPersonalizable = interface
Public Interface ITrackingPersonalizable
Derivato

Esempi

Nell'esempio di codice riportato di ITrackingPersonalizable seguito viene illustrato l'utilizzo di metodi e proprietà per tenere traccia del caricamento e del salvataggio delle informazioni sulla personalizzazione.The following code example demonstrates using ITrackingPersonalizable methods and properties to track the loading and saving of personalization information. L'esempio è costituito da due parti, una pagina aspx e un file che devono essere inseriti in una sottodirectory App_Code.The example consists of two parts, an .aspx page and a file that should be placed in an App_Code subdirectory.

Nell'esempio di codice seguente viene creato un controllo Web part che consente a un utente di immettere informazioni sull'URL e di salvare tali informazioni per l'utente.The following code example creates a Web Parts control that allows a user to enter URL information and saves this information for the user.

namespace PersTest
{

    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Diagnostics;
    using System.Drawing;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;

    public class UrlListWebPart : WebPart, IPersonalizable
    {

        private ArrayList _sharedUrls;
        private ArrayList _userUrls;
        private bool _listDirty;

        private TextBox _nameTextBox;
        private TextBox _urlTextBox;
        private Button _addButton;
        private BulletedList _list;

        public override string Subtitle
        {
            get
            {
                return Text;
            }
        }

        [Personalizable, WebBrowsable]
        public virtual string Text
        {
            get
            {
                object o = ViewState["Text"];
                return (o != null) ? (String)o : "My Links";
            }
            set
            {
                ViewState["Text"] = value;
            }
        }

        protected override void CreateChildControls()
        {
            Label nameLabel = new Label();
            Label urlLabel = new Label();
            LiteralControl breakLiteral1 = new LiteralControl("<br />");
            LiteralControl breakLiteral2 = new LiteralControl("<br />");
            LiteralControl breakLiteral3 = new LiteralControl("<br />");

            _nameTextBox = new TextBox();
            _urlTextBox = new TextBox();
            _addButton = new Button();
            _list = new BulletedList();

            nameLabel.Text = "Name: ";
            urlLabel.Text = "URL: ";
            _nameTextBox.ID = "nameTextBox";
            _urlTextBox.ID = "urlTextBox";
            _addButton.Text = "Add";
            _addButton.ID = "addButton";
            _addButton.Click += new EventHandler(this.OnClickAddButton);
            _list.DisplayMode = BulletedListDisplayMode.HyperLink;
            _list.ID = "list";

            Controls.Add(nameLabel);
            Controls.Add(_nameTextBox);
            Controls.Add(breakLiteral1);

            Controls.Add(urlLabel);
            Controls.Add(_urlTextBox);
            Controls.Add(breakLiteral2);

            Controls.Add(_addButton);
            Controls.Add(breakLiteral3);

            Controls.Add(_list);
        }

        private void OnClickAddButton(object sender, EventArgs e)
        {
            string name = _nameTextBox.Text.Trim();
            string url = _urlTextBox.Text.Trim();

            Pair p = new Pair(name, url);
            if (WebPartManager.Personalization.Scope == PersonalizationScope.Shared)
            {
                _sharedUrls ??= new ArrayList();
                _sharedUrls.Add(p);
            }
            else
            {
                _userUrls ??= new ArrayList();
                _userUrls.Add(p);
            }

            OnUrlAdded();
        }

        protected virtual void OnUrlAdded()
        {
            _listDirty = true;
            ChildControlsCreated = false;
        }

        protected override void RenderContents(HtmlTextWriter writer)
        {
            if (_sharedUrls != null)
            {
                foreach (Pair p in _sharedUrls)
                {
                    _list.Items.Add(new ListItem((string)p.First, (string)p.Second));
                }
            }
            if (_userUrls != null)
            {
                foreach (Pair p in _userUrls)
                {
                    _list.Items.Add(new ListItem((string)p.First, (string)p.Second));
                }
            }

            base.RenderContents(writer);
        }

        public virtual bool IsDirty
        {
            get
            {
                return _listDirty;
            }
        }
        public new virtual void Load(PersonalizationDictionary state)
        {
            if (state != null)
            {
                PersonalizationEntry sharedUrlsEntry = state["sharedUrls"];
                if (sharedUrlsEntry != null)
                {
                    _sharedUrls = (ArrayList)sharedUrlsEntry.Value;
                }

                PersonalizationEntry userUrlsEntry = state["userUrls"];
                if (userUrlsEntry != null)
                {
                    _userUrls = (ArrayList)userUrlsEntry.Value;
                }
            }
        }

        public virtual void Save(PersonalizationDictionary state)
        {
            if ((_sharedUrls != null) && (_sharedUrls.Count != 0))
            {
                state["sharedUrls"] = new PersonalizationEntry(_sharedUrls, PersonalizationScope.Shared);
            }
            if ((_userUrls != null) && (_userUrls.Count != 0))
            {
                state["userUrls"] = new PersonalizationEntry(_userUrls, PersonalizationScope.User);
            }
        }
    }

    public class UrlListExWebPart : UrlListWebPart, ITrackingPersonalizable
    {

        private string _trackingLog = String.Empty;
        private bool _loading;
        private bool _saving;

        public override string Text
        {
            get
            {
                return base.Text;
            }
            set
            {
                if (base.Text.Equals(value) == false)
                {
                    base.Text = value;
                    SetPersonalizationDirty();
                }
            }
        }
        protected override void OnUrlAdded()
        {
            base.OnUrlAdded();
            SetPersonalizationDirty();
        }
        protected override void RenderContents(HtmlTextWriter writer)
        {
            base.RenderContents(writer);

            writer.Write("<br />");
            writer.Write("<pre id=\"" + ClientID + "$log" + "\">");
            writer.Write(_trackingLog);
            writer.Write("</pre>");
        }

        public override void Load(PersonalizationDictionary state)
        {
            if (_loading == false)
            {
                throw new InvalidOperationException();
            }
        }

        public override void Save(PersonalizationDictionary state)
        {
            if (_saving == false)
            {
                throw new InvalidOperationException();
            }
            base.Save(state);
        }
        bool ITrackingPersonalizable.TracksChanges
        {
            get
            {
                return true;
            }
        }
        void ITrackingPersonalizable.BeginLoad()
        {
            _loading = true;
            _trackingLog = "1. BeginLoad\r\n";
        }
        void ITrackingPersonalizable.BeginSave()
        {
            _saving = true;
            _trackingLog += "3. BeginSave\r\n";
        }
        void ITrackingPersonalizable.EndLoad()
        {
            _loading = false;
            _trackingLog += "2. EndLoad\r\n";
        }
        void ITrackingPersonalizable.EndSave()
        {
            _saving = false;
            _trackingLog += "4. EndSave";
        }
    }
}



Imports System.Collections
Imports System.ComponentModel
Imports System.Diagnostics
Imports System.Drawing
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts


Namespace PersTest
    Public Class UrlListWebPart
        Inherits WebPart
        Implements IPersonalizable

        Private _sharedUrls As ArrayList
        Private _userUrls As ArrayList
        Private _listDirty As Boolean

        Private _nameTextBox As TextBox
        Private _urlTextBox As TextBox
        Private _addButton As Button
        Private _list As BulletedList


        Public Overrides ReadOnly Property Subtitle() As String
            Get
                Return [Text]
            End Get
        End Property


        <Personalizable(), WebBrowsable()> _
        Public Overridable Property [Text]() As String
            Get
                Dim o As Object = ViewState("Text")
                If o Is Nothing Then
                    Return "My Links"
                Else
                    Return CType(o, String)
                End If

            End Get
            Set(ByVal value As String)
                ViewState("Text") = value
            End Set
        End Property


        Protected Overrides Sub CreateChildControls()
            Dim nameLabel As New Label()
            Dim urlLabel As New Label()
            Dim breakLiteral1 As New LiteralControl("<br />")
            Dim breakLiteral2 As New LiteralControl("<br />")
            Dim breakLiteral3 As New LiteralControl("<br />")

            _nameTextBox = New TextBox()
            _urlTextBox = New TextBox()
            _addButton = New Button()
            _list = New BulletedList()

            nameLabel.Text = "Name: "
            urlLabel.Text = "URL: "
            _nameTextBox.ID = "nameTextBox"
            _urlTextBox.ID = "urlTextBox"
            _addButton.Text = "Add"
            _addButton.ID = "addButton"
            AddHandler _addButton.Click, AddressOf Me.OnClickAddButton
            _list.DisplayMode = BulletedListDisplayMode.HyperLink
            _list.ID = "list"

            Controls.Add(nameLabel)
            Controls.Add(_nameTextBox)
            Controls.Add(breakLiteral1)

            Controls.Add(urlLabel)
            Controls.Add(_urlTextBox)
            Controls.Add(breakLiteral2)

            Controls.Add(_addButton)
            Controls.Add(breakLiteral3)

            Controls.Add(_list)

        End Sub


        Private Sub OnClickAddButton(ByVal sender As Object, ByVal e As EventArgs)
            Dim name As String = _nameTextBox.Text.Trim()
            Dim url As String = _urlTextBox.Text.Trim()

            Dim p As New Pair(name, url)
            If WebPartManager.Personalization.Scope = PersonalizationScope.Shared Then
                If _sharedUrls Is Nothing Then
                    _sharedUrls = New ArrayList()
                End If
                _sharedUrls.Add(p)
            Else
                If _userUrls Is Nothing Then
                    _userUrls = New ArrayList()
                End If
                _userUrls.Add(p)
            End If

            OnUrlAdded()

        End Sub


        Protected Overridable Sub OnUrlAdded()
            _listDirty = True
            ChildControlsCreated = False

        End Sub


        Protected Overrides Sub RenderContents(ByVal writer As HtmlTextWriter)
            If Not (_sharedUrls Is Nothing) Then
                Dim p As Pair
                For Each p In _sharedUrls
                    _list.Items.Add(New ListItem(CStr(p.First), CStr(p.Second)))
                Next p
            End If
            If Not (_userUrls Is Nothing) Then
                Dim p As Pair
                For Each p In _userUrls
                    _list.Items.Add(New ListItem(CStr(p.First), CStr(p.Second)))
                Next p
            End If

            MyBase.RenderContents(writer)

        End Sub


        Public Overridable ReadOnly Property IsDirty() As Boolean _
            Implements IPersonalizable.IsDirty
            Get
                Return _listDirty
            End Get
        End Property

        Public Overridable Shadows Sub Load(ByVal state As PersonalizationDictionary) Implements IPersonalizable.Load
            If Not (state Is Nothing) Then
                Dim sharedUrlsEntry As PersonalizationEntry = state("sharedUrls")
                If Not (sharedUrlsEntry Is Nothing) Then
                    _sharedUrls = CType(sharedUrlsEntry.Value, ArrayList)
                End If

                Dim userUrlsEntry As PersonalizationEntry = state("userUrls")
                If Not (userUrlsEntry Is Nothing) Then
                    _userUrls = CType(userUrlsEntry.Value, ArrayList)
                End If
            End If
            '       Return False

        End Sub

        Public Overridable Sub Save(ByVal state As PersonalizationDictionary) Implements IPersonalizable.Save
            If Not (_sharedUrls Is Nothing) AndAlso _sharedUrls.Count <> 0 Then
                state("sharedUrls") = New PersonalizationEntry(_sharedUrls, PersonalizationScope.Shared)
            End If
            If Not (_userUrls Is Nothing) AndAlso _userUrls.Count <> 0 Then
                state("userUrls") = New PersonalizationEntry(_userUrls, PersonalizationScope.User)
            End If

        End Sub
    End Class


    Public Class UrlListExWebPart
        Inherits UrlListWebPart
        Implements ITrackingPersonalizable

        Private _trackingLog As String = String.Empty
        Private _loading As Boolean
        Private _saving As Boolean


        Public Overrides Property [Text]() As String
            Get
                Return MyBase.Text
            End Get
            Set(ByVal value As String)
                If MyBase.Text.Equals(value) = False Then
                    MyBase.Text = value
                    SetPersonalizationDirty()
                End If
            End Set
        End Property

        Protected Overrides Sub OnUrlAdded()
            MyBase.OnUrlAdded()
            SetPersonalizationDirty()

        End Sub

        Protected Overrides Sub RenderContents(ByVal writer As HtmlTextWriter)
            MyBase.RenderContents(writer)

            writer.Write("<br />")
            writer.Write("<pre id=""" + ClientID + "$log" + """>")
            writer.Write(_trackingLog)
            writer.Write("</pre>")

        End Sub


        Public Overrides Sub Load(ByVal state As PersonalizationDictionary)
            If _loading = False Then
                Throw New InvalidOperationException()
            End If
            MyBase.Load(state)

        End Sub


        Public Overrides Sub Save(ByVal state As PersonalizationDictionary)
            If _saving = False Then
                Throw New InvalidOperationException()
            End If
            MyBase.Save(state)

        End Sub

        ReadOnly Property TracksChanges() As Boolean Implements ITrackingPersonalizable.TracksChanges
            Get
                Return True
            End Get
        End Property

        Sub BeginLoad() Implements ITrackingPersonalizable.BeginLoad
            _loading = True
            _trackingLog = "1. BeginLoad" + vbCr + vbLf

        End Sub

        Sub BeginSave() Implements ITrackingPersonalizable.BeginSave
            _saving = True
            _trackingLog += "3. BeginSave" + vbCr + vbLf

        End Sub

        Sub EndLoad() Implements ITrackingPersonalizable.EndLoad
            _loading = False
            _trackingLog += "2. EndLoad" + vbCr + vbLf

        End Sub

        Sub EndSave() Implements ITrackingPersonalizable.EndSave
            _saving = False
            _trackingLog += "4. EndSave"

        End Sub
    End Class

Nella pagina aspx seguente viene creata una zona Web part e il controllo viene aggiunto alla zona.The following .aspx page creates a Web Parts zone and adds the control to the zone. La pagina fa anche riferimento a un controllo di accesso che è necessario usare per accedere ai singoli utenti in modo che sia possibile applicare la personalizzazione.The page also references a login control that you should use to log on individual users so that personalization can be applied.

<%@ Page Language="C#"  %>
<%@ Register TagPrefix="dict" namespace="PersTest" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<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="WebPartManager1" runat="server"></asp:WebPartManager>
    &nbsp;<asp:LoginName ID="LoginName1" runat="server" />
        &nbsp;
        <asp:LoginStatus ID="LoginStatus1" runat="server" LogoutAction="RedirectToLoginPage" />
        &nbsp;&nbsp;&nbsp;&nbsp;<br />
    <div>
    <asp:WebPartZone ID="WebPartZone1" runat="server">
                 <ZoneTemplate>
        <dict:UrlListWebPart id="PersDict" title="Personalization Dictionary" runat="server" />
       
        </ZoneTemplate>
        </asp:WebPartZone>
    </div>
    </form>
</body>
</html>
<%@ Page Language="VB" %>
<%@ Register TagPrefix="dict" namespace="PersTest" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<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="WebPartManager1" runat="server"></asp:WebPartManager>
    &nbsp;<asp:LoginName ID="LoginName1" runat="server" />
        &nbsp;
        <asp:LoginStatus ID="LoginStatus1" runat="server" LogoutAction="RedirectToLoginPage" />
        &nbsp;&nbsp;&nbsp;&nbsp;<br />
    <div>
    <asp:WebPartZone ID="WebPartZone1" runat="server">
                 <ZoneTemplate>
        <dict:UrlListWebPart id="PersDict" title="Personalization Dictionary" runat="server" />
       
        </ZoneTemplate>
        </asp:WebPartZone>
    </div>
    </form>
</body>
</html>

Commenti

Questa interfaccia consente agli sviluppatori di controlli di tenere traccia delle diverse fasi del ciclo di vita della personalizzazione, inclusi il caricamento e il salvataggio dei dati sulla personalizzazione.This interface allows control developers to track different phases of the personalization life cycle, including the loading and saving of personalization data. Nella maggior parte dei casi, per usare questa interfaccia è necessario creare WebPart un WebPartManager oggetto personalizzato o e implementare questa interfaccia.In most cases, to use this interface you would create a custom WebPart or WebPartManager and implement this interface. Inoltre, i controlli che devono gestire il rilevamento delle modifiche ("Dirty") devono implementare questa interfaccia.Additionally, controls that need to manage their own change ("dirty") tracking should implement this interface. true ITracksChanges controlli che gestiscono il rilevamento delle modifiche devono essere restituiti dalla proprietà.Controls that manage their own change tracking should return true from the TracksChanges property.

Se false viene restituito, ASP.NET è responsabile della determinazione delle modifiche confrontando le informazioni sulle proprietà caricate con le informazioni sulla proprietà salvate.If false is returned, then ASP.NET is responsible for determining changes by comparing the property information loaded with the property information that was saved.

Proprietà

TracksChanges

Indica se il controllo tiene traccia dello stato delle relative modifiche.Indicates whether the control tracks the status of its changes.

Metodi

BeginLoad()

Rappresenta l'inizio della fase di caricamento per le informazioni sulla personalizzazione.Represents the beginning of the load phase for personalization information.

BeginSave()

Rappresenta la fase precedente all'estrazione dei dati sulla personalizzazione da un controllo.Represents the phase prior to extracting personalization data from a control.

EndLoad()

Rappresenta la fase successiva all'applicazione dei dati sulla personalizzazione a un controllo.Represents the phase after personalization data has been applied to a control.

EndSave()

Rappresenta la fase successiva all'estrazione dei dati sulla personalizzazione da un controllo.Represents the phase after personalization data has been extracted from a control.

Si applica a

Vedi anche