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


コントロール プロパティで Personalizable 属性を使用するだけでなく、コントロールで、パーソナル化状態の適用や抽出を行うための追加管理機能として IPersonalizable を実装することもできます。たとえば、プライベート状態情報を管理する必要があるコントロールでは、このインターフェイスを実装する必要があります。カスタム キャッシュ ソリューション、メインフレームへのデータ永続化、XML Web サービスなど、複合的な機構を通じてパーソナル化データにアクセスするコントロールでも、このインターフェイスを実装する必要があります。
![]() |
---|
App_Code ディレクトリで定義されたクラスに基づいて型を追加し、既定の機構を利用してバイナリ シリアル化を行わないようにしてください。App_Code ベースのコンポーネントは、アセンブリ名が随時変更されることがあるため、一貫してバイナリ シリアル化できるとは限りません。 |

IPersonalizable インターフェイスを使用する方法を次のコード例に示します。この例は、UrlListWebPart という名前の Web パーツ コントロールを参照する .aspx ページで構成されています。.aspx ファイルのコード例を次に示します。
<%@ Page Language="VB" %> <%@ Register TagPrefix="dict" 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"> <html > <head runat="server"> <title>IPersonalizable</title> </head> <body> <form id="form1" runat="server"> <asp:WebPartManager ID="mgr" runat="server" /> <div> <asp:WebPartZone ID="WebPartZone1" runat="server"> <ZoneTemplate> <dict:urllistwebpart id="listwp1" runat="server" title="URL List WebPart" /> </ZoneTemplate> </asp:WebPartZone> </div> </form> </body> </html>
<%@ Page Language="C#" %> <%@ Register TagPrefix="dict" 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"> <html > <head runat="server"> <title>IPersonalizable</title> </head> <body> <form id="form1" runat="server"> <asp:WebPartManager ID="mgr" runat="server" /> <div> <asp:WebPartZone ID="WebPartZone1" runat="server"> <ZoneTemplate> <dict:urllistwebpart id="listwp1" runat="server" title="URL List WebPart" /> </ZoneTemplate> </asp:WebPartZone> </div> </form> </body> </html>
次のコードは、カスタム WebPart コントロールのソースです。このファイルは、App_Code ディレクトリに配置する必要があります。
Imports System Imports System.Collections Imports System.ComponentModel Imports System.Diagnostics Imports System.Drawing Imports System.Web Imports System.Web.UI Imports System.Security.Permissions 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 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 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 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 End Class End Namespace
namespace Samples.AspNet.CS.Controls { using System; using System.Collections; using System.ComponentModel; using System.Diagnostics; using System.Drawing; using System.Web; using System.Web.UI; using System.Security.Permissions; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; [AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)] 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; 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); } } } }
ブラウザにページを読み込みます。URL を表す名前を入力し、http:// で始まる実際の URL を追加し、[追加] ボタンをクリックして URL を追加します。

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 によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


Weblioに収録されているすべての辞書からIPersonalizable インターフェイスを検索する場合は、下記のリンクをクリックしてください。

- IPersonalizable インターフェイスのページへのリンク