다음을 통해 공유


IPersonalizable 인터페이스

정의

개인 설정 상태의 적용과 추출을 위한 추가 관리 기능을 정의합니다.

public interface class IPersonalizable
public interface IPersonalizable
type IPersonalizable = interface
Public Interface IPersonalizable
파생

예제

다음 코드 예제를 사용 하는 방법에 설명 합니다 IPersonalizable 인터페이스입니다. 예제는 라는 웹 파트 컨트롤을 참조 하는.aspx 페이지로 구성 됩니다 UrlListWebPart합니다. 다음 코드는.aspx 파일의 예입니다.

<%@ 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 xmlns="http://www.w3.org/1999/xhtml" >
<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="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 xmlns="http://www.w3.org/1999/xhtml" >
<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 디렉터리에 배치 되어야 합니다.

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)
            {
                _sharedUrls ??= new ArrayList();
                _sharedUrls.Add(p);
            }
            else
            {
                _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);
            }
        }
    }
}

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


      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


      Protected Overridable Sub OnUrlAdded()
          _listDirty = True
          ChildControlsCreated = False

      End Sub


      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


      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

      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

브라우저에서 페이지를 로드 합니다. 로 시작 하는 실제 URL을 추가 하 고 URL을 나타내는 이름 입력 http://를 클릭 합니다 추가 URL 추가 단추입니다.

설명

사용 하는 것 외에도 합니다 Personalizable 특성 컨트롤 속성에 컨트롤을 구현할 수도 IPersonalizable 애플리케이션 및 개인 설정 상태를 추출 하기 위한 추가 관리 기능에 대 한 합니다. 예를 들어 프라이빗 상태 정보를 관리 해야 하는 컨트롤은이 인터페이스를 구현 해야 합니다. 컨트롤 사용자 지정 캐시 솔루션, 메인프레임 또는 XML Web services에 데이터 지 속성 등의 복잡 한 메커니즘을 통해 개인 설정된 데이터에 액세스 하는이 인터페이스를 구현도 해야 합니다.

중요

하지 App_Code 디렉터리에 정의 된 클래스를 기반으로 하는 형식을 추가 해야 하며 그런 다음 기본 이진 serialization 메커니즘에 따라 달라 집니다. App_Code 기반 아티팩트가 하지 이진 직렬화 일관 되 게 때문에 시간에서 임의 지점에서 변경 어셈블리 이름을 가질 수 있습니다.

속성

IsDirty

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

메서드

Load(PersonalizationDictionary)

사용자 지정 데이터를 컨트롤로 로드합니다.

Save(PersonalizationDictionary)

사용자 지정 속성과 내부 상태 정보를 컨트롤의 PersonalizationDictionary 개체에 저장합니다.

적용 대상