IPersonalizable.IsDirty プロパティ
アセンブリ: System.Web (system.web.dll 内)
構文
IPersonalizable インターフェイスで管理されるカスタム データが変更されている場合は true。それ以外の場合は false。
コントロールによって管理されるデータが変更されている場合、そのコントロールは "ダーティ" と見なされます。IPersonalizable インターフェイスを通じて管理するカスタム データが変更されている場合、コントロールは true を返す必要があります。コントロールがこのプロパティから true を返した場合、プロパティ値の抽出時に、コントロールの Save インターフェイスのメソッドの実装が呼び出されます。
メモ |
---|
このプロパティは、POST 要求の処理の後半でパーソナル化インフラストラクチャによって自動的にチェックされます。ただし、GET 要求では、IsDirty プロパティから返される値はチェックされません。その他のいくつかのイベントでは、IPersonalizable によって管理されるデータだけでなく、コントロールの状態が "ダーティ" と見なされるコントロールが保存されるようにする必要があります。GET 要求時にコントロールがコントロール自体を "ダーティ" とマークする可能性がある場合や、GET 要求時にパーソナル化インフラストラクチャが非常に特殊な境界条件によりコントロールを "ダーティ" と見なす場合は、Save が必ず呼び出されます。 |
コントロールでは、関連する WebPartManager コントロールを参照し、Scope プロパティをチェックして、現在のスコープを確認できます。コントロールのカスタム データの "ダーティ" な状態は、現在のスコープに対して適切である必要があります。
IsDirty プロパティを使用するコード例を次に示します。例の最初の部分は、WebPart コントロールをホストする Web ページです。
<%@ 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>
例の 2 番目の部分は、UrlListWebPart というカスタム WebPart コントロールのコードです。例を実行するには、このファイルを App_Code ディレクトリに配置する必要があります。ソース コードで IsDirty プロパティが実装されていることに注意してください。
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 によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。
参照
- IPersonalizable.IsDirty プロパティのページへのリンク