다음을 통해 공유


WebPartManager.IPersonalizable.IsDirty 속성

정의

WebPartManager 컨트롤에서 관리하는 사용자 지정 개인 설정 상태 데이터가 웹 페이지에서 변경되었는지 여부를 나타내는 값을 가져옵니다.

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 몇 가지 일반적인 페이지 개인 설정 인스턴스를 나타냅니다.

코드 예제에는 네 부분으로 구성됩니다.

  • 웹 파트 컨트롤이 포함된 페이지의 표시 모드를 변경할 수 있는 사용자 컨트롤입니다.

  • 연결할 수 있는 두 개의 사용자 지정 WebPart 컨트롤 및 인터페이스에 대한 코드를 포함하는 소스 파일입니다.

  • 모든 컨트롤을 호스트하는 웹 페이지입니다.

  • 코드 예제의 작동 방식에 대한 설명입니다.

코드 예제의 첫 번째 부분은 디스플레이 모드를 변경하기 위한 사용자 컨트롤입니다. 클래스 개요의 예제 섹션에서 사용자 컨트롤에 WebPartManager 대한 소스 코드를 가져올 수 있습니다. 디스플레이 모드 및 사용자 컨트롤의 작동 방식에 대한 자세한 내용은 연습: 웹 파트 페이지에서 디스플레이 모드 변경을 참조하세요.

예제의 두 번째 부분은 사용자 지정 컨트롤과 인터페이스가 있는 소스 파일입니다. 인터페이스는 IZipCode 하나의 메서드를 노출하고 사용자 지정 ZipCodeWebPart 컨트롤에 구현된 이 메서드는 연결 시나리오에서 공급자 역할을 할 수 있도록 하는 ZipCodeWebPart 콜백 메서드 역할을 합니다. 다른 컨트롤인 WeatherWebPart는 연결에서 소비자 컨트롤 역할을 하며 에서 제공하는 특정 인터페이스를 ZipCodeWebPart사용할 수 있습니다. 실제 애플리케이션에서는 WeatherWebPart 공급자에서 개인 설정 된 우편 번호 값을 사용 하 고 사용자에 게 그래픽 날씨 정보를 제공할 수 있습니다.

코드 예제를 실행하려면 이 소스 코드를 컴파일해야 합니다. 명시적으로 컴파일하고 결과 어셈블리를 웹 사이트의 Bin 폴더 또는 전역 어셈블리 캐시에 넣을 수 있습니다. 또는 소스 코드를 사이트의 App_Code 폴더에 배치하여 런타임에 동적으로 컴파일할 수 있습니다. 이 코드 예제에서는 동적 컴파일을 사용합니다. 따라서 웹 페이지 맨 위에 있는 Register 이 구성 요소에 대한 지시문에는 특성이 없는 AssemblyNamespace 특성만 TagPrefix 포함됩니다. 컴파일 방법을 보여 주는 연습은 연습: 사용자 지정 웹 서버 컨트롤 개발 및 사용을 참조하세요.

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

코드 예제의 세 번째 부분은 웹 페이지입니다. 두 개의 WebPartZone 영역이 포함되어 있으며 첫 번째 영역에는 두 개의 사용자 지정 WebPart 컨트롤이 포함됩니다. 사용자가 페이지에 추가할 수 있는 표준 Calendar 컨트롤을 포함하는 영역도 CatalogZone 있습니다. 요소는 <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 컨트롤의 Label1 텍스트가 표시되어 개인 설정 데이터가 변경되었음을 나타냅니다. 예를 들어, 다음을 수행할 수 있습니다.

  • WebPart 컨트롤 연결 단추를 클릭하여 컨트롤 간의 연결을 만듭니다.

  • 디스플레이 모드 드롭다운 목록 컨트롤을 사용하여 페이지를 카탈로그 모드로 전환하고 내 일정 컨트롤을 두 번째 WebPartZone 영역에 추가합니다.

  • 페이지를 다시 찾아보기 모드로 변경하고 내 일정 컨트롤의 동사 메뉴(제목 표시줄에 화살표 기호가 표시됨)를 클릭한 다음 닫기를 선택하여 닫고 페이지 카탈로그에 추가합니다.

  • 페이지를 카탈로그 모드로 반환하고 내 일정 컨트롤을 페이지에 다시 추가합니다.

  • 디스플레이 모드 컨트롤을 사용하여 페이지를 디자인 모드로 전환하고 하나 이상의 컨트롤을 다른 영역이나 동일한 영역의 다른 위치로 끌어 컨트롤의 레이아웃을 다시 정렬합니다.

설명

속성은 IPersonalizable.IsDirty 호출자가 컨트롤에서 관리하는 WebPartManager 개인 설정 상태 데이터가 변경되었는지 여부를 확인하는 방법을 제공합니다. 사용자가 페이지 레이아웃 변경, 연결 만들기 또는 삭제, 컨트롤 추가 또는 삭제와 같은 페이지 수준 세부 정보를 개인 설정하면 컨트롤에서 관리하는 WebPartManager 개인 설정 데이터가 변경됩니다. 호출자가 직접 액세스할 수 없는 보호된 IsCustomPersonalizationStateDirty 속성의 값을 호출자에게 반환하는 통과 메서드입니다.

참고

속성은 IPersonalizable.IsDirty 개인 설정 가능한 속성 값 또는 개별 컨트롤의 모양에 영향을 주는 개별 WebPart 속성이 변경되었는지 여부를 나타내지 않습니다. 컨트롤 수준 개인 설정은 각 컨트롤에 대해 개별적으로 추적됩니다. 속성은 IPersonalizable.IsDirty 페이지 수준에 있고 컨트롤에 의해 WebPartManager 관리되는 개인 설정 데이터가 변경되었는지 여부만 나타냅니다.

다음 목록에서는 속성이 값을 true반환하도록 하는 IPersonalizable.IsDirty 몇 가지 일반적인 개인 설정 인스턴스에 대해 설명합니다. 이는 컨트롤에 WebPartManager 일부 변경된 개인 설정 데이터가 있음을 나타냅니다.

  • 페이지에서 정적 WebPart 컨트롤(또는 서버 또는 사용자 컨트롤)을 닫습니다.

  • 페이지 카탈로그에서 페이지로 닫힌 정적 WebPart 컨트롤 복원

  • 영역 내 또는 다른 영역으로 컨트롤을 이동합니다.

  • 또는 서버 컨트롤의 WebPart 카탈로그에서 컨트롤을 추가하거나 프로그래밍 방식으로 컨트롤을 추가합니다.

  • 프로그래밍 방식으로 또는 연결 UI(사용자 인터페이스)를 사용하여 두 WebPart 컨트롤 간의 연결을 만듭니다.

  • 프로그래밍 방식으로 또는 연결 UI를 사용하여 두 WebPart 컨트롤 간의 연결을 삭제합니다.

이 속성 값에 액세스하려면 컨트롤 인스턴스를 WebPartManager 인터페이스로 IPersonalizable 캐스팅해야 합니다. 그런 다음 속성 값을 읽을 IsDirty 수 있습니다.

적용 대상

추가 정보