IPersonalizable.Save(PersonalizationDictionary) IPersonalizable.Save(PersonalizationDictionary) IPersonalizable.Save(PersonalizationDictionary) IPersonalizable.Save(PersonalizationDictionary) Method

Definition

Speichert benutzerdefinierte Eigenschaften und interne Zustandsinformationen im PersonalizationDictionary-Objekt des Steuerelements.Saves custom properties and internal state information in the control's PersonalizationDictionary object.

public:
 void Save(System::Web::UI::WebControls::WebParts::PersonalizationDictionary ^ state);
public void Save (System.Web.UI.WebControls.WebParts.PersonalizationDictionary state);
abstract member Save : System.Web.UI.WebControls.WebParts.PersonalizationDictionary -> unit
Public Sub Save (state As PersonalizationDictionary)

Parameter

state
PersonalizationDictionary PersonalizationDictionary PersonalizationDictionary PersonalizationDictionary

Ein PersonalizationDictionary, das benutzerdefinierte Daten zum Gültigkeitsbereich enthält, die aus dem zugrunde liegenden Datenspeicher geladen wurden.A PersonalizationDictionary that contains custom scoped data that was loaded from the underlying data store.

Beispiele

Im folgenden Codebeispiel wird die Implementierung Save der-Methode in WebPart einem benutzerdefinierten-Steuerelement veranschaulicht.The following code example demonstrates implementing the Save method in a custom WebPart control. Den vollständigen Code, der zum Ausführen dieses Beispiels erforderlich ist, finden Sie im IPersonalizable Beispiel Abschnitt in der Übersicht über die-Klasse.For the full code required to run this example, see the Example section in the IPersonalizable class overview.

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);
            }
        }
    }
}

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

Hinweise

Ein Server Steuerelement kann seine eigenen benutzerdefinierten Eigenschaften und internen Zustandsinformationen PersonalizationDictionary speichern, die state im-Parameter angegeben sind.A server control can store its own custom properties and internal state information the PersonalizationDictionary specified in the state parameter. Die Informationen werden als eine Reihe von Name-Wert-Paaren gespeichert.The information is stored as a series of name/value pairs. Es liegt in der Verantwortung des-Steuer Elements, Name/Wert-Paare zu verwenden, die es bei nachfolgenden Aufrufen an das Load -Steuerelement durch die-Methode erkennen kann.It is the responsibility of the control to use name/value pairs that it can recognize during subsequent calls made to the control through the Load method.

Ein Steuerelement kann auf das WebPartManager zugeordnete Steuerelement PersonalizationScope verweisen und das Objekt überprüfen, um den aktuellen Bereich zu bestimmen.A control can reference its associated WebPartManager control and check the PersonalizationScope object to determine the current scope. Benutzerdefinierte Zustandsinformationen sollten für den aktuellen Gültigkeitsbereich geeignet sein.Custom state information should be appropriate for the current scope. Beachten Sie, PersonalizationEntry dass jeder Wert, der dem PersonalizationDictionary Objekt hinzugefügt wird, dem entsprechenden Bereichs Wert zugeordnet werden muss, da die Personalisierungs Infrastruktur beim Shared UserZusammenführen von benutzerdefinierten Daten von diesem abhängt. vor der Übergabe an die Load -Methode.Note that each PersonalizationEntry value that is added to the PersonalizationDictionary object should be associated with the appropriate scope value, because the personalization infrastructure depends on this when merging Shared and User-scoped custom data prior to passing it to the Load method.

Bei Verwendung der standardmäßigen ASP.NET-Implementierung von Webparts müssen Steuerelemente sicherstellen, dass die im Zustands Wörterbuch platzierten Objekte von ObjectStateFormatter der ASP.NET-Klasse serialisiert werden können.When using the standard ASP.NET implementation of Web Parts, controls must ensure that objects placed in the state dictionary can be serialized by the ASP.NET ObjectStateFormatter class. In der Praxis bedeutet dies Folgendes:In practice, this means the following:

  • Primitive .NET Framework Typen, Zeichen folgen und Sammlungs orientierte .NET Framework Typen wie Arrays, Array Listen, Hash Tabellen und Hybrid Wörterbücher sind automatisch serialisierbar.Primitive .NET Framework types, strings, and collection-oriented .NET Framework types such as arrays, array lists, hash tables, and hybrid dictionaries, are automatically serializable.

  • Benutzerdefinierte Typen, die eigene TypeConverter Klassen bereitstellen, die serialisieren und aus Zeichen folgen deserialisieren können, werden als serialisierbar betrachtet.Custom types that supply their own TypeConverter classes capable of serializing to and deserializing from strings are considered serializable.

  • Benutzerdefinierte Typen, die von der BinaryFormatter -Klasse serialisiert werden können, werden als serialisierbar betrachtet.Custom types that can be serialized by the BinaryFormatter class are considered serializable.

Wichtig

Sie sollten Typen nicht auf der Basis von Klassen hinzufügen, die im Verzeichnis App_Code definiert sind, und dann vom standardbinärserialisierungsmechanismus abhängig sind.You should not add types based on classes defined in the App_Code directory and then depend on the default binary serialization mechanism. App_Code-basierte Artefakte sind nicht konsistent serialisierbar, da Sie die Assemblynamen zu zufälligen Zeitpunkten ändern können.App_Code-based artifacts are not consistently binary-serializable due to the fact that they can have their assembly names changed at random points in time.

Gilt für: