Freigeben über


Exemplarische Vorgehensweise: Implementieren von Webparts-Personalisierungen mit IPersonalizable

Aktualisiert: November 2007

In dieser exemplarischen Vorgehensweise wird veranschaulicht, wie durch Implementieren eines Benutzersteuerelements als personalisierbares Webparts-Steuerelement benutzerspezifische Standardwerte bereitgestellt werden können.

Die wichtigste Eigenschaft dieses Steuerelements ist die Speicherung von personalisierbaren Eigenschaften in Variablentypen ohne Wert. In diesem Fall werden die Werte als BulletedList-Steuerelement gespeichert. Das System kann daher Änderungen der Werte in der Liste durch den Benutzer nicht feststellen. In dieser exemplarischen Vorgehensweise wird erläutert, wie das System über die geänderten Werte informiert werden kann, damit die Werte weiter verwendet werden können. Dies kann von Nutzen sein, wenn Sie anpassbare Onlineformulare pro Benutzer erstellen. Durch die Webparts-Personalisierung kann das System den Benutzer erkennen, sodass dessen Standardformularwerte bei nachfolgenden Aufrufen der Site automatisch wiederhergestellt werden können.

Hinweis:

Das in dieser exemplarischen Vorgehensweise erstellte Benutzersteuerelement erbt nicht von der WebPart-Klasse. Ein Benutzersteuerelement kann jedoch als WebPart-Steuerelement fungieren. In dieser exemplarischen Vorgehensweise fügen Sie ein Benutzersteuerelement einer WebPartZoneBase-Zone hinzu. Dadurch kann ASP.NET das Benutzersteuerelement in ein GenericWebPart-Steuerelement einbinden. Das Benutzersteuerelement kann dann wie jedes andere WebPart-Steuerelement eingesetzt werden und ermöglicht die Verwendung der Personalisierung.

Im Rahmen dieser exemplarischen Vorgehensweise erhalten Sie Informationen zu folgenden Vorgängen:

  • Erstellen eines Benutzersteuerelements mit personalisierbaren Eigenschaften, dessen Werte im Langzeitspeicher gespeichert werden können.

  • Anzeigen benutzerspezifischer Standardwerte.

  • Arbeiten mit dem Benutzersteuerelement in einer Zone als echtes WebPart-Steuerelement.

Hinweis:

Dieser Anwendungstyp kann mit ASP.NET-Profilen entwickelt werden. In diesem Fall speichern Sie jedoch keine Informationen über den Benutzer, die für die gesamte Anwendung benötigt werden, wie dies bei einer Warenkorb-Anwendung der Fall ist. Stattdessen speichern Sie benutzerspezifische Einstellungen oder Einstellungen für jedes Steuerelement auf der Grundlage einzelner Seiten. Weitere Informationen hierzu finden Sie unter Übersicht über ASP.NET-Profileigenschaften.

Vorbereitungsmaßnahmen

Um die exemplarische Vorgehensweise nachzuvollziehen, benötigen Sie Folgendes:

  • Internetinformationsdienste (IIS) müssen auf dem Computer installiert und konfiguriert sein, auf dem die Site gehostet wird. Weitere Informationen zur Installation und Konfiguration von IIS finden Sie in der IIS-Hilfe, die der Installation beiliegt, oder in der IIS-Onlinehilfe auf der Microsoft Technet-Site (Internet Information Services 6.0 Technical Resources).

  • Eine ASP.NET-Website, die einzelne Benutzer identifizieren kann. Wenn Sie bereits eine solche Site konfiguriert haben, können Sie diese als Ausgangspunkt für die exemplarische Vorgehensweise verwenden. Andernfalls finden Sie weitere Informationen zum Erstellen eines virtuellen Verzeichnisses unter Gewusst wie: Erstellen und Konfigurieren von virtuellen Verzeichnissen in IIS 5.0 und 6.0.

  • Ein konfigurierter Personalisierungsanbieter und eine konfigurierte Datenbank. In der Standardeinstellung ist die Webparts-Personalisierung aktiviert und verwendet den SQL-Personalisierungsanbieter (SqlPersonalizationProvider) mit der Microsoft SQL Server Express Standard Edition (SSE) zum Speichern von Personalisierungsdaten. In dieser exemplarischen Vorgehensweise werden SSE und der Standard-SQL-Anbieter verwendet. Wenn Sie SSE bereits installiert haben, ist keine Konfiguration erforderlich. SSE ist mit Microsoft Visual Studio 2005 als optionaler Teil der Installation verfügbar oder kann kostenlos auf Microsoft.com gedownloadet werden. Die Verwendung einer Vollversion von Microsoft SQL Server erfordert das Installieren und Konfigurieren einer Datenbank für ASP.NET-Anwendungsdienste sowie das Konfigurieren des SQL-Personalisierungsanbieters zum Herstellen einer Verbindung mit der Datenbank. Weitere Informationen finden Sie unter Erstellen und Konfigurieren der Datenbank für die Anwendungsdienste für SQL Server. Sie können auch einen benutzerdefinierten Anbieter für Datenbanken oder Speicherlösungen erstellen und konfigurieren, die nicht SQL-basiert sind. Weitere Informationen sowie ein Codebeispiel finden Sie unter Implementieren eines Mitgliedschaftsanbieters.

Erstellen eines personalisierbaren Benutzersteuerelements, das Variablen vom Typ Verweis enthält

In diesem Teil der exemplarischen Vorgehensweise erstellen Sie ein Benutzersteuerelement, mit dem Sie einen angezeigten Namen und eine URL für eine Website eingeben können. Durch Klicken auf die Schaltfläche Speichern wird der angezeigte Name einem BulletedList-Steuerelement hinzugefügt. Diese Werte werden von der Webparts-Personalisierungsfeature pro Benutzer gespeichert. Jedes Mal, wenn ein Benutzer von einer anderen Seite aus bzw. in einer neuen Sitzung auf das Steuerelement zugreift, werden die gespeicherten BulletedList-Werte vom System angezeigt.

Hinweis:

Die Webparts-Personalisierung ist bereits standardmäßig aktiviert; sie muss nicht separat aktiviert werden. Weitere Informationen zur Personalisierung finden Sie unter Übersicht über die Webparts-Personalisierung.

So erstellen Sie ein personalisierbares Benutzersteuerelement

  1. Erstellen Sie mit einem Text-Editor eine neue Datei mit dem Namen UrlList.ascx für das Benutzersteuerelement, und speichern Sie diese Datei im Webverzeichnis. Der Code zum Implementieren des Steuerelementverhaltens ist, wie in Schritt 4 erläutert, in einer anderen Datei enthalten.

  2. Fügen Sie wie im folgenden Beispiel dargestellt eine Steuerdirektive in der von Ihnen verwendeten Programmiersprache in die neue Datei ein.

    <%@ Control Language="VB" AutoEventWireup="false"  
    CodeFile="UrlList.ascx.vb" Inherits="WebParts_UrlList" %>
    
    <%@ Control Language="C#" AutoEventWireup="true" 
    CodeFile="UrlList.ascx.cs" Inherits="WebParts_UrlList" %>
    
  3. Fügen Sie unter der Direktive folgende Elemente für die Darstellung der Benutzeroberfläche (UI) des Steuerelements ein.

    <table>
    
    <tr>
        <td> 
            <asp:Label ID="NameLabelID" Text="Name: "  />
        </td>
        <td>
            <asp:TextBox ID="NameTextBoxID"  />
        </td>
    </tr>
    
    <tr>
        <td>
            <asp:Label ID="UrlLabelID1" Text="Url:  "  />
        </td>
        <td>
            <asp:TextBox ID="UrlTextBoxID"  />
        </td>
    </tr>
    
    <tr>
        <td>
            <asp:Button ID="SaveID"  
                OnClick="SaveButton_Click" Text="Save" />
        </td>
        <td>
            <asp:Button ID="ResetID"  
                OnClick="ResetButton_Click" Text="Reset" />
        </td>
    </tr>
    
    </table>
    
    <div>
         // This is the complex variable whose status 
         // must be preserved.
        <asp:BulletedList 
            ID="BulletedListID" 
            DisplayMode="HyperLink"  Target="_blank" />
    
    </div>
    
  4. Erstellen Sie eine weitere neue Datei als Begleitdatei, und fügen Sie folgenden Code hinzu. Im folgenden Beispiel ist die Begleitdatei (je nach verwendeter Sprache UrlList.ascx.vb oder UrlList.ascx.cs) dargestellt, mit der das Verhalten des voranstehenden UrlList.ascx-Steuerelements implementiert wird. Der Code besteht aus zwei Teilen. Der erste Teil enthält den Code zum Behandeln der Benutzereingabe und des Ladeereignisses der Seite. Der andere Teil enthält den Code zum Implementieren der IPersonalizable-Schnittstelle. So können die BulletedList-Werte, d. h., die Personalisierung des Benutzersteuerelements, beibehalten werden. In diesem Beispiel werden die Schnittstellenmember Load, Save und IsDirty implementiert.

    ' UrlList.ascx.vb
    Imports System
    Imports System.Collections
    Imports System.Web
    Imports System.Web.UI
    Imports System.Web.UI.WebControls
    Imports System.Web.UI.WebControls.WebParts
    
    Partial Class WebParts_VB_UrlList
        Inherits System.Web.UI.UserControl
        Implements IPersonalizable
    
        Private _userUrls As ArrayList
        Private _listDirty As Boolean
    
        ' This code implements the IPersonalizable members.
    
        Public Overridable ReadOnly Property IsDirty() As Boolean _
        Implements System.Web.UI.WebControls.WebParts.IPersonalizable.IsDirty
    
            Get
                Return _listDirty
            End Get
        End Property
    
    
        Public Overridable Shadows Sub Load(ByVal state As PersonalizationDictionary) _
        Implements System.Web.UI.WebControls.WebParts.IPersonalizable.Load
    
    
            If Not (state Is Nothing) Then
    
                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 System.Web.UI.WebControls.WebParts.IPersonalizable.Save
    
            If Not (_userUrls Is Nothing) AndAlso _userUrls.Count <> 0 Then
                state("userUrls") = New PersonalizationEntry(_userUrls, _
                PersonalizationScope.User)
            End If
    
        End Sub
    
        ' This code handles the user's input.
        Protected Sub SaveButton_Click(ByVal sender As Object, _
        ByVal e As EventArgs)
    
            Dim name As String = NameTextBoxID.Text.Trim()
            Dim url As String = UrlTextBoxID.Text.Trim()
    
            Dim p As New Pair(name, url)
    
            If _userUrls Is Nothing Then
                _userUrls = New ArrayList()
            End If
            _userUrls.Add(p)
    
            BulletedListID.Items.Add(New ListItem(CStr(p.First), _
            CStr(p.Second)))
    
            _listDirty = True
    
        End Sub 'SaveButton_Click
    
    
        Protected Sub ResetButton_Click(ByVal sender As Object, _
        ByVal e As EventArgs)
    
            _userUrls = New ArrayList()
    
             BulletedListID.Items.Clear()
    
            _listDirty = True
    
        End Sub 'ResetButton_Click 
    
    
        Protected Sub Page_Load(ByVal sender As Object, _
        ByVal e As EventArgs)
            If Not (_userUrls Is Nothing) Then
                BulletedListID.Items.Clear()
                Dim p As Pair
                For Each p In _userUrls
                    BulletedListID.Items.Add(New _
                    ListItem(CStr(p.First), CStr(p.Second)))
                Next p
            End If
    
        End Sub 'Page_Load
    
    End Class
    
    // UrlList.ascx.cs
    using System;
    using System.Collections;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    
    public partial class WebParts_UrlList : System.Web.UI.UserControl, 
        IPersonalizable
    {
        private ArrayList _userUrls;
        private bool _listDirty;
    
           // This code implements the IPersonalizable members.
    
        public new void Load(PersonalizationDictionary state)
        {
            if (state != null)
            {
    
                PersonalizationEntry userUrlsEntry = state["userUrls"];
                if (userUrlsEntry != null)
                {
                    _userUrls = (ArrayList)userUrlsEntry.Value;
                }
    
            }
        }
    
        public void Save(PersonalizationDictionary state)
        {
    
            if ((_userUrls != null) && (_userUrls.Count != 0))
            {
                state["userUrls"] =
                    new PersonalizationEntry(_userUrls, PersonalizationScope.User);
            }
    
        }
    
        public virtual bool IsDirty
        {
            get
            {
                return _listDirty;
            }
        }
    
           // This code handles the user's input.
    
        protected void Page_Load(object sender, EventArgs e)
        {
            if (_userUrls != null)
            {
                BulletedListID.Items.Clear();
                foreach (Pair p in _userUrls)
                {
                    BulletedListID.Items.Add(
                        new ListItem((string)p.First, (string)p.Second));
                }
            }
    
        }
    
        protected void SaveButton_Click(object sender, EventArgs e)
        {
            string name = NameTextBoxID.Text.Trim();
            string url = UrlTextBoxID.Text.Trim();
    
            Pair p = new Pair(name, url);
    
            if (_userUrls == null)
            {
                _userUrls = new ArrayList();
            }
            _userUrls.Add(p);
    
            BulletedListID.Items.Add(
                    new ListItem((string)p.First, (string)p.Second));
    
            _listDirty = true;
        }
    
    
        protected void ResetButton_Click(object sender, EventArgs e)
        {
    
            _userUrls = new ArrayList();
    
             BulletedListID.Items.Clear();
    
            _listDirty = true;
    
        }
    
    } 
    
  5. Verwenden Sie je nach verwendeter Sprache den Dateinamen UrlList.ascx.vb oder UrlList.ascx.cs für die Datei, und speichern Sie diese im Stammverzeichnis der Website.

    Sicherheitshinweis:

    Dieses Steuerelement verfügt über ein Textfeld für Benutzereingaben. Dies stellt ein potentielles Sicherheitsrisiko dar. Benutzereingaben auf einer Webseite können möglicherweise schädliche Clientskripts enthalten. In der Standardeinstellung werden Benutzereingaben von ASP.NET-Webseiten überprüft, um sicherzustellen, dass die Eingabe keine Skript- oder HTML-Elemente enthält. Wenn diese Überprüfung aktiviert ist, müssen Benutzereingaben nicht explizit auf Skripts oder HTML-Elemente geprüft werden. Weitere Informationen finden Sie unter Übersicht über Skriptangriffe.

Verweisen auf das Benutzersteuerelement als Webparts-Steuerelement

Nach dem Sie nun ein Benutzersteuerelement mit personalisierbaren Eigenschaften erstellt haben, können Sie eine Web Forms-Seite erstellen, die das Benutzersteuerelement als Webparts-Steuerelement hostet.

Hinweis:

Für eine funktionierende Personalisierung muss das Steuerelement als Webparts-Steuerelement gehostet werden.

So verweisen Sie auf das Benutzersteuerelement als Webparts-Steuerelement

  1. Erstellen Sie mit einem Text-Editor eine neue Datei. Fügen Sie am Anfang der Datei, wie im folgenden Beispiel dargestellt, eine Seitendeklaration ein.

    <%@ page language="VB" %>
    
    <%@ page language="C#" %>
    
  2. Fügen Sie unterhalb der Seitendeklaration eine Deklaration hinzu, um auf das zuvor erstellte Benutzersteuerelement zu verweisen, wie im folgenden Beispiel veranschaulicht:

    <%@ Register tagprefix="UserControl" tagname="UrlList" 
    src="UrlList.ascx" %>
    
    <%@ Register tagprefix="UserControl" tagname="UrlList" 
    src="UrlList.ascx" %>
    
  3. Fügen Sie die folgende einfache Seitenstruktur unterhalb des Verweises auf das Steuerelement hinzu, um das Benutzersteuerelement als Webparts-Steuerelement zu hosten.

    Hinweis:

    Damit das Benutzersteuerelement die Funktion eines Webparts-Steuerelements übernehmen kann, muss die Seite ein <asp:webpartmanager>-Element enthalten, und das Benutzersteuerelement muss wie im folgenden Beispiel zwischen einem <asp:webpartzone>-Element und einem nachfolgenden <zonetemplate>-Element enthalten sein.

    <html>
    <head >
        <title>Personalizable User Control</title>
    </head>
    <body>
        <form id="form1" >
          <asp:WebPartManager ID="mgr"  />
            <div>
              <asp:WebPartZone ID="WebPartZone1" >
                <ZoneTemplate>
                  < UserControl:UrlList ID="AccUserID" 
                    title="URL List WebPart" />  
                </ZoneTemplate>
              </asp:WebPartZone>
            </div>    
        </form>
    </body>
    </html>
    
  4. Speichern Sie die Datei unter dem Namen UrlList.aspx im gleichen Verzeichnis wie das Benutzersteuerelement.

    Sie verfügen nun über ein personalisierbares Benutzersteuerelement, auf das als Webparts-Steuerelement in einer Web Forms-Seite verwiesen wird.

Abschließend müssen Sie das Benutzersteuerelement noch testen.

So testen Sie das personalisierbare Benutzersteuerelement

  1. Laden Sie die Seite UrlList.aspx in einem Browser.

  2. Geben Sie Werte in die Felder Name und URL ein, und klicken Sie auf die Schaltfläche Formularwerte speichern.

  3. Schließen Sie den Browser.

  4. Laden Sie die Seite erneut in einem Browser.

    Die zuvor eingegebenen Werte sollten im Formular angezeigt werden. Dies sind die zuvor im BulletedList-Steuerelement gespeicherten Werte, die beim erneuten Laden der Seite im Browser aus der Datenbank wiederhergestellt wurden.

  5. Geben Sie neue Werte in das Formular ein, aber klicken Sie nicht auf die Schaltfläche, um diese zu speichern. Schließen Sie den Browser.

  6. Laden Sie die Seite erneut in einem Browser. Die ursprünglich von Ihnen eingegebenen und in den personalisierbaren Eigenschaften gespeicherten Werte sollten erneut im Formular angezeigt werden.

Nächste Schritte

In dieser exemplarischen Vorgehensweise wurden die grundlegenden Aufgaben beim Erstellen eines Benutzersteuerelements mit personalisierbaren Eigenschaften veranschaulicht. Sie haben ein Steuerelement erstellt, mit dem Sie benutzerspezifische Einstellungen für bestimmte Steuerelemente und Seiten speichern können, und mit dem Sie diese gespeicherten Einstellungen anzeigen können, wenn der Benutzer die Seite in einer neuen Browsersitzung erneut aufruft. Hier einige Vorschläge für die weitere Vorgehensweise:

Siehe auch

Konzepte

Übersicht über ASP.NET-Webparts

Übersicht über die Webparts-Personalisierung