Programmeren in ASP.NET/Personalisatie en profielen
Personalisatie
[bewerken]Veel huidige applicaties passen zich in meer of mindere mate aan de gebruiker aan. Dit kan bijvoorbeeld door de gebruiker de opmaak of indeling van pagina’s te laten bepalen. ASP.NET 2.0 biedt de volgende mogelijkheden tot personalisatie:
- Profielen
- Thema's
- WebParts
Dit hoofdstuk gaat verder over profielen. Thema's en WebParts worden in de volgende hoofdstukken besproken.
Profielen
[bewerken]Profielen zijn een manier om gegevens over de gebruikers bij te houden binnen de website. Deze gegevens kunnen adresgegevens zijn, voorkeurinstellingen of bijvoorbeeld de inhoud van een winkelmandje.
ASP.NET bewaart het profiel automatisch in een achterliggende databank. Zoals bij Memberships werkt dit met een zogenaamde provider. Standaard wordt een provider voor SQL Server 2005 meegeleverd.
Schema van een profiel opstellen
[bewerken]Om gegevens van een gebruiker op te slaan, moet je eerst bepalen welke gegevens je wilt opslaan. Dit kunnen eenvoudige gegevens zijn, zoals adresgegevens, maar mag ook een complex object zijn, zoals bijvoorbeeld een winkelwagentje.
Welke gegevens je wilt opslaan leg je vast onder de <profile>-sectie in web.config. Je maakt hiervoor <add>-elementen aan onder de <properties>-groep.
Bijvoorbeeld:
web.config (fragment)
<configuration> <system.web> <profile> <properties> <add name="Straat" type="System.String" /> <add name="Huisnummer" type="System.Int32" /> <add name="Postcode" type="System.String" /> <add name="Plaats" type="System.String" /> </properties> </profile> <system.web> </configuration>
Merk op dat je voor elk gegeven een name en een type moet opgeven. Als je het type-attribuut weglaat, wordt automatisch String verondersteld.
Vanaf nu kunnen deze gegevens voor elke gebruiker bijgehouden worden.
Om ze te gebruiken in een pagina gebruik je het Profile-object.
Maak een nieuwe pagina profielen.aspx, gebaseerd op login.master. Voeg een Label toe, en de volgende code:
profielen.aspx
<%@ Page Language="VB" MasterPageFile="~/login.master" Title="Profielen" %> <script runat="server"> Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Label1.Text = Profile.Straat & " " & Profile.Huisnummer & "<br>" & _ Profile.Postcode & " " & Profile.Plaats End Sub </script> <asp:Content ID="Content1" ContentPlaceHolderID="MainBody" Runat="Server"> <asp:Label ID="Label1" runat="server" /> </asp:Content>
Merk op dat IntelliSense in Visual Web Developer de eigenschappen van het profiel automatisch oppikt.
Als je deze pagina test, en je logt in, dan zie je nog niets (in feite zie je een lege string). Dat komt omdat het profiel voor jou nog geen gegevens bevat.
Nu maak je een pagina om het profiel bij te werken:
profielenwijzig.aspx
<%@ Page Language="VB" MasterPageFile="~/login.master" Title="Wijzig profiel" %> <script runat="server"> Protected Sub btnBijwerken_Click(ByVal sender As Object, ByVal e As _ System.EventArgs) Try Profile.Straat = tbStraat.Text Profile.Huisnummer = tbHuisnummer.Text Profile.Postcode = tbPostcode.Text Profile.Plaats = tbPlaats.Text Label1.Text = "Het profiel werd bijgewerkt met succes." Catch ex As Exception Trace.Warn(ex.Message) End Try End Sub </script> <asp:Content ID="Content1" ContentPlaceHolderID="MainBody" Runat="Server"> Straat: <asp:TextBox ID="tbStraat" runat="server" /> Huisnummer: <asp:TextBox ID="tbHuisnummer" runat="server" Width="56px" /><br /> Postcode: <asp:TextBox ID="tbPostcode" runat="server" Width="72px" /> Plaats: <asp:TextBox ID="tbPlaats" runat="server" /><br /> <asp:Button ID="btnBijwerken" OnClick="btnBijwerken_Click" runat="server" Text="Profiel bijwerken" /><br /> <asp:Label ID="Label1" runat="server" /> </asp:Content>
Als je je profiel bijwerkt, en je vraagt daarna de vorige pagina (profielen.aspx) weer op, dan krijg je inderdaad je adres te zien.
Merk op dat je een foutmelding krijgt als je niet ingelogd bent, en toch je profiel probeert bij te werken.
Je kan ook voorkeuren in een profiel bewaren:
<configuration> <system.web> <profile> <properties> <add name="Achtergrondkleur" type="System.Drawing.Color" serializeAs="String" /> <add name="Voorgrondkleur" type="System.Drawing.Color" serializeAs="String" /> </properties> </profile> <system.web> </configuration>
Je moet voor types die geen basistypes zijn het attribuut serializeAs="String" toevoegen, anders werkt het niet.
Profieleigenschappen groeperen
[bewerken]Als het profiel wat uitgebreider wordt, kan je het overzichtelijk maken door de eigenschappen in groepen in te delen. Dit gebeurt met het <group>-element:
<configuration> <system.web> <profile> <properties> <group name="Adres"> <add name="Straat" type="System.String" /> <add name="Huisnummer" type="System.Int32" /> <add name="Postcode" type="System.String" /> <add name="Plaats" type="System.String" /> </group> </properties> </profile> <anonymousIdentification enabled="true" /> <system.web> </configuration>
Hier zijn de betreffende eigenschappen gegroepeerd onder de groep ‘Adres’.
Je vraagt de waarde van Straat in het profiel nu op met deze expressie: Profile.Adres.Straat
Nesten van groepen is niet mogelijk.
Custom klassen gebruiken in een profiel
[bewerken]<configuration> <system.web> <profile> <properties> <add name="Winkelmandje" type="Shop.Basket, Shop" /> <group name="Adres"> <add name="Straat" type="System.String" /> <add name="Huisnummer" type="System.Int32" /> <add name="Postcode" type="System.String" /> <add name="Plaats" type="System.String" /> </group> </properties> </profile> <anonymousIdentification enabled="true" /> <system.web> </configuration>
Hier werd een eigenschap ‘Winkelmandje’ toegevoegd, waarvan het volledige type, inclusief de naam van de Assembly is aangegeven. Dat is nodig, omdat de Shop.Basket-klasse een custom type is. Merk op dat de mogelijkheid tot anonieme identificatie ingeschakeld is om anoniem gebruik van het winkelmandje mogelijk te maken.
Anonieme profielen
[bewerken]Hoewel profielen meestal gebruikt worden om gegevens te bewaren voor aangelogde gebruikers, is het ook mogelijk om hetzelfde te doen voor anonieme gebruikers.
Om dit mogelijk te maken moet je anonieme identificatie inschakelen. Dit doe je door het element
<anonymousIdentification enabled="true"/>
toe te voegen aan de <system.web>-sectie in web.config. Hierdoor krijgt elke anonieme gebruiker een cookie, waarin zijn of haar profiel bijgehouden wordt.
Alle eigenschappen in het profiel die je wil gebruiken voor anonieme gebruikers, moeten gemarkeerd worden met allowAnonymous="true". Hiermee wordt aangegeven dat deze eigenschap te gebruiken is voor gebruikers die nog niet aangemeld zijn, zodat een gebruiker bijvoorbeeld al zaken in het winkelmandje kan doen voordat hij/zij is aangemeld. Wanneer de gebruiker zich aanmeldt, kan het object worden gekopieerd naar het profiel van de aangemelde gebruiker, en zijn de andere eigenschappen ook beschikbaar.
<system.web> <profile> <properties> <add name="Winkelmandje" type="Shop.Basket, Shop" allowAnonymous="true" /> <group name="Adres"> <add name="Straat" type="System.String" /> <add name="Huisnummer" type="System.Int32" /> <add name="Postcode" type="System.String" /> <add name="Plaats" type="System.String" /> </group> </properties> </profile> <anonymousIdentification enabled="true" /> <system.web>
Beheer van profielen
[bewerken]Naast het Profile-object is er ook een ProfileManager-object, waarmee je profielen kan beheren zowel voor anonieme als aangemelde gebruikers.
Voorbeelden van wat je kan doen met ProfileManager zijn:
- statistische informatie opvragen over alle profielen
- profielen opzoeken die gedurende een bepaalde periode niet meer gewijzigd zijn.
- profielen verwijderen
Meer informatie over profielen vind je hier (Engelstalig): Meer over profielen