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

속성 값

Boolean

개인 설정 상태 데이터가 변경되었는지 여부를 나타내는 부울 값입니다.

구현

예제

다음 코드 예제에서는 컨트롤의 IPersonalizable.IsDirty 개인 설정 데이터를 변경 하는 몇 가지 일반적인 페이지 개인 설정 인스턴스를 WebPartManager 나타내는 속성의 간단한 사용을 보여 줍니다.

코드 예제에는 다음 4개의 부분이 있습니다.

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

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

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

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

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

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

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

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 수 있습니다.

적용 대상

추가 정보