WebPartManager.IPersonalizable.IsDirty プロパティ
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
WebPartManager コントロールによって管理されているカスタムのパーソナル化状態データが Web ページ上で変更されたかどうかを示す値を取得します。
property bool System::Web::UI::WebControls::WebParts::IPersonalizable::IsDirty { bool get(); };
bool System.Web.UI.WebControls.WebParts.IPersonalizable.IsDirty { get; }
member this.System.Web.UI.WebControls.WebParts.IPersonalizable.IsDirty : bool
ReadOnly Property IsDirty As Boolean Implements IPersonalizable.IsDirty
プロパティ値
パーソナル化状態データが変更されたかどうかを示すブール値。
実装
例
次のコード例では、 プロパティを簡単に使用して、コントロールの IPersonalizable.IsDirty パーソナル化データが変更される一 WebPartManager 般的なページ パーソナル化インスタンスを示します。
このコード例には、次の 4 つの部分があります。
Web パーツ コントロールを含むページの表示モードを変更できるユーザー コントロール。
接続できる 2 つのカスタム WebPart コントロールのコードとインターフェイスを含むソース ファイル。
すべてのコントロールをホストする Web ページ。
コード例の動作の説明。
コード例の最初の部分は、表示モードを変更するためのユーザー コントロールです。 ユーザー コントロールのソース コードは、クラスの概要の [例] セクション WebPartManager から取得できます。 表示モードとユーザー コントロールの動作の詳細については、「 チュートリアル: Web パーツ ページでの表示モードの変更」を参照してください。
この例の 2 番目の部分は、カスタム コントロールと インターフェイスを含むソース ファイルです。 インターフェイスは 1 つのメソッドを IZipCode
公開し、カスタム ZipCodeWebPart
コントロールに実装されているこのメソッドは、接続シナリオでプロバイダーとして機能できるようにするため ZipCodeWebPart
のコールバック メソッドとして機能します。 もう 1 つのコントロールは、 WeatherWebPart
接続のコンシューマー コントロールとして機能します。によって提供される ZipCodeWebPart
特定のインターフェイスを使用できます。 実際のアプリケーションでは、 WeatherWebPart
プロバイダーからカスタマイズされた郵便番号値を使用し、ユーザーにグラフィカルな気象情報を提供できます。
コード例を実行するには、このソース コードをコンパイルする必要があります。 明示的にコンパイルし、結果のアセンブリを Web サイトの Bin フォルダーまたはグローバル アセンブリ キャッシュに配置できます。 または、ソース コードをサイトの App_Code フォルダーに配置して、実行時に動的にコンパイルすることもできます。 このコード例では、動的コンパイルを使用します。したがって、Web ページの上部にあるこのコンポーネントの ディレクティブには、 属性のない 属性と Namespace
属性のみがTagPrefix
含まれていることにAssembly
注意Register
してください。 コンパイル方法を示すチュートリアルについては、「 チュートリアル: カスタム Web サーバー コントロールの開発と使用」を参照してください。
namespace Samples.AspNet.CS.Controls
{
using System;
using System.Web;
using System.Web.Security;
using System.Security.Permissions;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
[AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand,
Level = AspNetHostingPermissionLevel.Minimal)]
public interface IZipCode
{
string ZipCode { get; set;}
}
[AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand,
Level = AspNetHostingPermissionLevel.Minimal)]
public class ZipCodeWebPart : WebPart, IZipCode
{
string zipCodeText = String.Empty;
TextBox input;
Button send;
public ZipCodeWebPart()
{
}
// Make the implemented property personalizable to save
// the Zip Code between browser sessions.
[Personalizable()]
public virtual string ZipCode
{
get { return zipCodeText; }
set { zipCodeText = value; }
}
// This is the callback method that returns the provider.
[ConnectionProvider("Zip Code", "ZipCodeProvider")]
public IZipCode ProvideIZipCode()
{
return this;
}
protected override void CreateChildControls()
{
Controls.Clear();
input = new TextBox();
this.Controls.Add(input);
send = new Button();
send.Text = "Enter 5-digit Zip Code";
send.Click += new EventHandler(this.submit_Click);
this.Controls.Add(send);
}
private void submit_Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(input.Text))
{
zipCodeText = Page.Server.HtmlEncode(input.Text);
input.Text = String.Empty;
}
}
}
[AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand,
Level = AspNetHostingPermissionLevel.Minimal)]
public class WeatherWebPart : WebPart
{
private IZipCode _provider;
string _zipSearch;
Label DisplayContent;
// This method is identified by the ConnectionConsumer
// attribute, and is the mechanism for connecting with
// the provider.
[ConnectionConsumer("Zip Code", "ZipCodeConsumer")]
public void GetIZipCode(IZipCode Provider)
{
_provider = Provider;
}
protected override void OnPreRender(EventArgs e)
{
EnsureChildControls();
if (this._provider != null)
{
_zipSearch = _provider.ZipCode.Trim();
DisplayContent.Text = "My Zip Code is: " + _zipSearch;
}
}
protected override void CreateChildControls()
{
Controls.Clear();
DisplayContent = new Label();
this.Controls.Add(DisplayContent);
}
}
}
Imports System.Web
Imports System.Web.Security
Imports System.Security.Permissions
Imports System.Web.UI
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 Interface IZipCode
Property ZipCode() As String
End Interface
<AspNetHostingPermission(SecurityAction.Demand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
<AspNetHostingPermission(SecurityAction.InheritanceDemand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
Public Class ZipCodeWebPart
Inherits WebPart
Implements IZipCode
Private zipCodeText As String = String.Empty
Private input As TextBox
Private send As Button
Public Sub New()
End Sub
' Make the implemented property personalizable to save
' the Zip Code between browser sessions.
<Personalizable()> _
Public Property ZipCode() As String _
Implements IZipCode.ZipCode
Get
Return zipCodeText
End Get
Set(ByVal value As String)
zipCodeText = value
End Set
End Property
' This is the callback method that returns the provider.
<ConnectionProvider("Zip Code", "ZipCodeProvider")> _
Public Function ProvideIZipCode() As IZipCode
Return Me
End Function
Protected Overrides Sub CreateChildControls()
Controls.Clear()
input = New TextBox()
Me.Controls.Add(input)
send = New Button()
send.Text = "Enter 5-digit Zip Code"
AddHandler send.Click, AddressOf Me.submit_Click
Me.Controls.Add(send)
End Sub
Private Sub submit_Click(ByVal sender As Object, _
ByVal e As EventArgs)
If input.Text <> String.Empty Then
zipCodeText = Page.Server.HtmlEncode(input.Text)
input.Text = String.Empty
End If
End Sub
End Class
<AspNetHostingPermission(SecurityAction.Demand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
<AspNetHostingPermission(SecurityAction.InheritanceDemand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
Public Class WeatherWebPart
Inherits WebPart
Private _provider As IZipCode
Private _zipSearch As String
Private DisplayContent As Label
' This method is identified by the ConnectionConsumer
' attribute, and is the mechanism for connecting with
' the provider.
<ConnectionConsumer("Zip Code", "ZipCodeConsumer")> _
Public Sub GetIZipCode(ByVal Provider As IZipCode)
_provider = Provider
End Sub
Protected Overrides Sub OnPreRender(ByVal e As EventArgs)
EnsureChildControls()
If Not (Me._provider Is Nothing) Then
_zipSearch = _provider.ZipCode.Trim()
DisplayContent.Text = "My Zip Code is: " + _zipSearch
End If
End Sub
Protected Overrides Sub CreateChildControls()
Controls.Clear()
DisplayContent = New Label()
Me.Controls.Add(DisplayContent)
End Sub
End Class
End Namespace
コード例の 3 番目の部分は Web ページです。 2 つの WebPartZone ゾーンが含まれていることに注意してください。最初のゾーンには 2 つのカスタム WebPart コントロールが含まれています。 また、ユーザーがページに CatalogZone 追加できる標準 Calendar コントロールを含むゾーンもあります。 要素は <asp:connectionszone>
、ユーザーがコントロール間の接続を作成するための接続 UI を提供します。 メソッドで Page_PreRender
、パーソナル化データが変更されているかどうかを確認し、変更されている場合は の Label1
テキストを更新します。
<%@ Page Language="C#" %>
<%@ Register TagPrefix="uc1"
TagName="DisplayModeMenuCS"
Src="~/displaymodemenucs.ascx" %>
<%@ Register TagPrefix="aspSample"
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">
<script runat="server">
protected void Page_PreRender(object sender, EventArgs e)
{
// Clear the label if it has a previously set value.
Label1.Text = String.Empty;
// Cast the WebPartManager to the IPersonalizable interface
// so that you can access the property.
IPersonalizable stateData = (IPersonalizable)mgr1;
if (stateData.IsDirty)
Label1.Text = "WebPartManager personalization data is dirty.";
}
protected void Button1_Click(object sender, EventArgs e)
{
ProviderConnectionPoint provPoint =
mgr1.GetProviderConnectionPoints(zip1)["ZipCodeProvider"];
ConsumerConnectionPoint connPoint =
mgr1.GetConsumerConnectionPoints(weather1)["ZipCodeConsumer"];
WebPartConnection conn1 = mgr1.ConnectWebParts(zip1, provPoint,
weather1, connPoint);
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:WebPartManager ID="mgr1" runat="server" />
<uc1:DisplayModeMenuCS ID="menu1" runat="server" />
<asp:WebPartZone ID="WebPartZone1" runat="server">
<ZoneTemplate>
<aspSample:ZipCodeWebPart ID="zip1" runat="server"
Title="Zip Code Provider" />
<aspSample:WeatherWebPart ID="weather1" runat="server"
Title="Zip Code Consumer" />
</ZoneTemplate>
</asp:WebPartZone>
<asp:WebPartZone ID="WebPartZone2" runat="server">
<ZoneTemplate>
</ZoneTemplate>
</asp:WebPartZone>
<asp:CatalogZone ID="CatalogZone1" runat="server">
<ZoneTemplate>
<asp:DeclarativeCatalogPart ID="DeclarativeCatalogPart1"
runat="server">
<WebPartsTemplate>
<asp:Calendar ID="Calendar1" runat="server"
Title="My Calendar" />
</WebPartsTemplate>
</asp:DeclarativeCatalogPart>
<asp:PageCatalogPart ID="PageCatalogPart1" runat="server" />
</ZoneTemplate>
</asp:CatalogZone>
<asp:ConnectionsZone ID="ConnectionsZone1" runat="server" />
<asp:Button ID="Button1" runat="server"
Text="Connect WebPart Controls"
OnClick="Button1_Click" />
<hr />
<asp:Label ID="Label1" runat="server"
Text=""
Font-Bold="true" />
</div>
</form>
</body>
</html>
<%@ Page Language="vb" %>
<%@ Register TagPrefix="uc1"
TagName="DisplayModeMenuVB"
Src="~/displaymodemenuvb.ascx" %>
<%@ Register TagPrefix="aspSample"
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">
<script runat="server">
Protected Sub Page_PreRender(ByVal sender As Object, _
ByVal e As System.EventArgs)
' Clear the label if it has a previously set value.
Label1.Text = String.Empty
' Cast the WebPartManager to the IPersonalizable interface
' so that you can access the property.
Dim stateData As IPersonalizable = CType(mgr1, IPersonalizable)
If stateData.IsDirty Then
Label1.Text = "WebPartManager personalization data is dirty."
End If
End Sub
Protected Sub Button1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs)
Dim provPoint As ProviderConnectionPoint = _
mgr1.GetProviderConnectionPoints(zip1)("ZipCodeProvider")
Dim connPoint As ConsumerConnectionPoint = _
mgr1.GetConsumerConnectionPoints(weather1)("ZipCodeConsumer")
Dim conn1 As WebPartConnection = _
mgr1.ConnectWebParts(zip1, provPoint, weather1, connPoint)
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:WebPartManager ID="mgr1" runat="server" />
<uc1:DisplayModeMenuVB ID="menu1" runat="server" />
<asp:WebPartZone ID="WebPartZone1" runat="server">
<ZoneTemplate>
<aspSample:ZipCodeWebPart ID="zip1" runat="server"
Title="Zip Code Provider" />
<aspSample:WeatherWebPart ID="weather1" runat="server"
Title="Zip Code Consumer" />
</ZoneTemplate>
</asp:WebPartZone>
<asp:WebPartZone ID="WebPartZone2" runat="server">
<ZoneTemplate>
</ZoneTemplate>
</asp:WebPartZone>
<asp:CatalogZone ID="CatalogZone1" runat="server">
<ZoneTemplate>
<asp:DeclarativeCatalogPart ID="DeclarativeCatalogPart1"
runat="server">
<WebPartsTemplate>
<asp:Calendar ID="Calendar1" runat="server"
Title="My Calendar" />
</WebPartsTemplate>
</asp:DeclarativeCatalogPart>
<asp:PageCatalogPart ID="PageCatalogPart1" runat="server" />
</ZoneTemplate>
</asp:CatalogZone>
<asp:ConnectionsZone ID="ConnectionsZone1" runat="server" />
<asp:Button ID="Button1" runat="server"
Text="Connect WebPart Controls"
OnClick="Button1_Click" />
<hr />
<asp:Label ID="Label1" runat="server"
Text=""
Font-Bold="true" />
</div>
</form>
</body>
</html>
ブラウザーでページを読み込んだ後、パーソナル化データを変更するこのトピックの「解説」セクションに記載されているシナリオの一部を作成してみてください。 さまざまな変更を行うときに、コントロールによって WebPartManager 追跡されるパーソナル化シナリオの 1 つが変更されると、パーソナル化データが変更されたことを示すコントロールの Label1
テキストが表示されます。 たとえば、次のように操作できます。
[Web パーツ コントロールの接続] ボタンをクリックして 、コントロール間の接続を 作成します。
[表示モード] ドロップダウン リスト コントロールを使用してページをカタログ モードに切り替え、マイ カレンダー コントロールを 2 番目WebPartZoneのゾーンに追加します。
ページをブラウズ モードに戻し、 My Calendar コントロールの動詞メニュー (タイトル バーに矢印記号が表示されている) をクリックし、[ 閉じる ] を選択して閉じてページ カタログに追加します。
ページをカタログ モードに戻し、 マイ カレンダー コントロールをページに追加します。
表示モード コントロールを使用してページをデザイン モードに切り替え、1 つ以上のコントロールを別のゾーンまたは同じゾーン内の別の位置にドラッグしてコントロールのレイアウトを再配置します。
注釈
プロパティは IPersonalizable.IsDirty 、コントロールによって管理されるパーソナル化状態データが変更されたかどうかを呼び出し元が判断する方法を WebPartManager 提供します。 ページ レイアウトの変更、接続の作成または削除、コントロールの追加または削除など、ユーザーがページ レベルの詳細をカスタマイズすると、コントロールによって管理されるパーソナル化データが WebPartManager 変更されます。 これは、保護された IsCustomPersonalizationStateDirty プロパティの値を呼び出し元に返すパススルー メソッドであり、呼び出し元が直接アクセスすることはできません。
Note
プロパティは IPersonalizable.IsDirty 、カスタマイズ可能なプロパティ値、または個々のコントロールの外観に影響を与える個々 WebPart のプロパティが変更されたかどうかを示しません。 コントロール レベルのパーソナル化は、コントロールごとに個別に追跡されます。 プロパティは IPersonalizable.IsDirty 、ページ レベルにあり、コントロールによって WebPartManager 管理されているパーソナル化データが変更されたかどうかを示します。
次の一覧では、プロパティが の値true
を返すパーソナルIPersonalizable.IsDirty化の一般的なインスタンスについて説明します。これはWebPartManager、コントロールに変更されたパーソナル化データがあることを示しています。
ページ上の静的 WebPart コントロール (またはサーバーまたはユーザー コントロール) を閉じます。
閉じた静的 WebPart コントロールをページ カタログからページに復元する。
そのゾーン内または別のゾーンにコントロールを移動する。
または サーバー コントロールの WebPart カタログからコントロールを追加するか、プログラムでコントロールを追加します。
プログラムまたは接続ユーザー インターフェイス (UI) を使用して、2 つの WebPart コントロール間の接続を作成します。
プログラムまたは接続 UI を使用して、2 つの WebPart コントロール間の接続を削除する。
このプロパティ値にアクセスするには、コントロール インスタンスを WebPartManager インターフェイスにキャストする IPersonalizable 必要があります。その後、プロパティ値を IsDirty 読み取ることができます。
適用対象
こちらもご覧ください
.NET
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示