ITrackingPersonalizable インターフェイス
アセンブリ: System.Web (system.web.dll 内)


このインターフェイスにより、パーソナル化データの読み込みと保存を含むパーソナル化の有効期間の異なるフェーズを、コントロールの開発者が追跡できるようになります。ほとんどの場合、このインターフェイスを使用するには、カスタムの WebPart または WebPartManager を作成して、このインターフェイスを実装します。また、それ自体の変更 ("ダーティ") の追跡を管理する必要があるコントロールは、このインターフェイスを実装する必要があります。それ自体の変更の追跡を管理するコントロールは、TracksChanges プロパティから true を返す必要があります。
false を返す場合は、読み込まれたプロパティ情報を保存されていたプロパティ情報と比較することで、ASP.NET によって変更内容が確認されます。

ITrackingPersonalizable のメソッドとプロパティを使用して、パーソナル化情報の読み込みおよび保存を追跡するコード例を次に示します。このコード例は、.aspx ページと App_Code サブディレクトリに格納されるファイルの 2 つの部分で構成されます。
ユーザーが URL 情報を入力し、この URL 情報を保存できるようにする Web パーツ コントロールを作成するコード例を次に示します。
Imports System 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 'CreateChildControls 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 'OnClickAddButton Protected Overridable Sub OnUrlAdded() _listDirty = True ChildControlsCreated = False End Sub 'OnUrlAdded 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 'RenderContents 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 'Load 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 'Save 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 'OnUrlAdded 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 'RenderContents Public Overrides Sub Load(ByVal state As PersonalizationDictionary) If _loading = False Then Throw New InvalidOperationException() End If MyBase.Load(state) End Sub 'Load Public Overrides Sub Save(ByVal state As PersonalizationDictionary) If _saving = False Then Throw New InvalidOperationException() End If MyBase.Save(state) End Sub 'Save 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 'ITrackingPersonalizable.BeginLoad Sub BeginSave() Implements ITrackingPersonalizable.BeginSave _saving = True _trackingLog += "3. BeginSave" + vbCr + vbLf End Sub 'ITrackingPersonalizable.BeginSave Sub EndLoad() Implements ITrackingPersonalizable.EndLoad _loading = False _trackingLog += "2. EndLoad" + vbCr + vbLf End Sub 'ITrackingPersonalizable.EndLoad Sub EndSave() Implements ITrackingPersonalizable.EndSave _saving = False _trackingLog += "4. EndSave" End Sub 'ITrackingPersonalizable.EndSave
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"; } } }
Web パーツ ゾーンを作成し、そのゾーンにコントロールを追加する .aspx ページを次に示します。このページでは、パーソナル化が適用されるように個別のユーザーでログオンするために使用する必要があるログイン コントロールも参照します。
<%@ 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 > <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="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 > <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>


Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


ITrackingPersonalizable プロパティ
ITrackingPersonalizable メソッド

名前 | 説明 | |
---|---|---|
![]() | BeginLoad | パーソナル化情報の読み込みフェーズの先頭を表します。 |
![]() | BeginSave | コントロールからパーソナル化データを抽出する前のフェーズを表します。 |
![]() | EndLoad | パーソナル化データがコントロールに適用された後のフェーズを表します。 |
![]() | EndSave | パーソナル化データがコントロールから抽出された後のフェーズを表します。 |

ITrackingPersonalizable メンバ
Web パーツ コントロールで、パーソナル化の読み込みプロセスと保存プロセスの特定のフェーズを追跡できるようにします。
ITrackingPersonalizable データ型で公開されるメンバを以下の表に示します。


名前 | 説明 | |
---|---|---|
![]() | BeginLoad | パーソナル化情報の読み込みフェーズの先頭を表します。 |
![]() | BeginSave | コントロールからパーソナル化データを抽出する前のフェーズを表します。 |
![]() | EndLoad | パーソナル化データがコントロールに適用された後のフェーズを表します。 |
![]() | EndSave | パーソナル化データがコントロールから抽出された後のフェーズを表します。 |

- ITrackingPersonalizableのページへのリンク