Programmeren in ASP.NET/Personalisatie en profielen

Uit Wikibooks
Naar navigatie springen Naar zoeken springen

Programmeren in ASP.NET

  1. Wat is ASP.NET?
  2. Wat heb ik nodig voor ASP.NET?
  3. Een ASP.NET-server installeren
  4. Je eerste ASP.NET-pagina
  5. HTML-controls
  6. Foutzoeken
  7. Web-server-controls
  8. Webformulieren
  9. Veelgebruikte objecten
  10. Validering
  11. Master-pagina's
  12. Navigatie
  13. Gegevenstoegang
  14. Werken met databanken
  15. Databankgegevens wijzigen
  16. Werken met datacontrols
  17. GridView
  18. FormView en DetailsView
  19. User-controls
  20. Custom controls
  21. AJAX
  22. Viewstate
  23. Configuratiebestanden
  24. Webservices
  25. Beveiliging
  26. Personalisatie en profielen
  27. Thema's en skins
  28. WebParts
  29. Globalisering
  30. Caching
  31. Mail vanuit ASP.NET
  32. Reguliere expressies
  33. Server-side afbeeldingen
  34. Mobiele toepassingen
  35. Meer informatie
  36. Appendix: foutmeldingen

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

Informatie afkomstig van http://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.