Export (0) Print
Expand All

ITrackingPersonalizable Interface

Allows Web Parts controls to track the specific phases of the personalization load and save process.

Namespace:  System.Web.UI.WebControls.WebParts
Assembly:  System.Web (in System.Web.dll)

public interface ITrackingPersonalizable

The ITrackingPersonalizable type exposes the following members.

  NameDescription
Public propertyTracksChangesIndicates whether the control tracks the status of its changes.
Top

  NameDescription
Public methodBeginLoadRepresents the beginning of the load phase for personalization information.
Public methodBeginSaveRepresents the phase prior to extracting personalization data from a control.
Public methodEndLoadRepresents the phase after personalization data has been applied to a control.
Public methodEndSaveRepresents the phase after personalization data has been extracted from a control.
Top

This interface allows control developers to track different phases of the personalization life cycle, including the loading and saving of personalization data. In most cases, to use this interface you would create a custom WebPart or WebPartManager and implement this interface. Additionally, controls that need to manage their own change ("dirty") tracking should implement this interface. Controls that manage their own change tracking should return true from the TracksChanges property.

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.

The following code example demonstrates using ITrackingPersonalizable methods and properties to track the loading and saving of personalization information. The example consists of two parts, an .aspx page and a file that should be placed in an App_Code subdirectory.

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)
            {
                if (_sharedUrls == null)
                {
                    _sharedUrls = new ArrayList();
                }
                _sharedUrls.Add(p);
            }
            else
            {
                if (_userUrls == null)
                {
                    _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";
        }
    }
}


The following .aspx page creates a Web Parts zone and adds the control to the zone. 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>


.NET Framework

Supported in: 4, 3.5, 3.0, 2.0

Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Community Additions

ADD
Show:
© 2014 Microsoft