Sdílet prostřednictvím


ITrackingPersonalizable Rozhraní

Definice

Umožňuje ovládacím prvkům webových částí sledovat konkrétní fáze procesu načítání a ukládání přizpůsobení.

public interface class ITrackingPersonalizable
public interface ITrackingPersonalizable
type ITrackingPersonalizable = interface
Public Interface ITrackingPersonalizable
Odvozené

Příklady

Následující příklad kódu ukazuje použití ITrackingPersonalizable metod a vlastností ke sledování načítání a ukládání informací přizpůsobení. Příklad se skládá ze dvou částí, stránky .aspx a souboru, který by měl být umístěn v podadresáři App_Code.

Následující příklad kódu vytvoří webové části ovládací prvek, který umožňuje uživateli zadat informace adresy URL a uloží tyto informace pro uživatele.

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

Následující .aspx stránka vytvoří zónu webových částí a přidá do této zóny ovládací prvek. Stránka také odkazuje na ovládací prvek přihlášení, který byste měli použít k přihlášení jednotlivých uživatelů, aby bylo možné použít individuální nastavení.

<%@ 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>
     <asp:LoginName ID="LoginName1" runat="server" />
         
        <asp:LoginStatus ID="LoginStatus1" runat="server" LogoutAction="RedirectToLoginPage" />
            <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>
     <asp:LoginName ID="LoginName1" runat="server" />
         
        <asp:LoginStatus ID="LoginStatus1" runat="server" LogoutAction="RedirectToLoginPage" />
            <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>

Poznámky

Toto rozhraní umožňuje vývojářům řízení sledovat různé fáze životního cyklu přizpůsobení, včetně načítání a ukládání osobních dat. Ve většině případů byste k použití tohoto rozhraní vytvořili vlastní WebPart nebo WebPartManager a toto rozhraní implementovali. Kromě toho by toto rozhraní měly implementovat ovládací prvky, které potřebují spravovat vlastní sledování změn ("dirty"). Ovládací prvky, které spravují vlastní sledování změn, by se měly vrátit true z TracksChanges vlastnosti .

Pokud false je vrácena hodnota , pak je ASP.NET zodpovědný za určení změn porovnáním informací o vlastnosti načtených s informacemi o vlastnosti, které byly uloženy.

Vlastnosti

TracksChanges

Určuje, jestli ovládací prvek sleduje stav svých změn.

Metody

BeginLoad()

Představuje začátek fáze načítání pro informace o přizpůsobení.

BeginSave()

Představuje fázi před extrahováním dat přizpůsobení z ovládacího prvku.

EndLoad()

Představuje fázi po použití osobních dat na ovládací prvek.

EndSave()

Představuje fázi po extrakci osobních dat z ovládacího prvku.

Platí pro

Viz také