Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Artiklar / Titel på artikeln

Låt aspx-sidan ärva från en basklass

Postad 2005-10-02 av Pelle Johansson i sektionen ASP.NET, C#, Okategoriserat med 7 Kommentarer | Läst av: 4889, Betyg: 72%

Förord

När man skall bygga en ny site finns det så många saker att tänka på att man inte alltid vet vart man skall börja. Det finns tonvis med information på nätet och man samlar länkar till förbannelse. Jag tänkte i en kort artikel ta upp en av alla dessa tips som är bra att tänka på när man börjar bygga en ny site.
Innehåll
  » Förord
  » Vi börjar med aspx-sidan
  » Skriv en egen bas-klass
  » Vad innebär detta?
  » Funktioner som nås utan namepace
  » När skall jag använda detta?
  » Avrundning
Relaterade artiklar


Förord

Tänk dig att du har en hemsida som består av en massa aspx sidor och du mitt i arbetet får för dig att du skulle behöva några funktioner och rutiner som dels alltid är nåbara på sidan, utan att behöva skriva någon klass och använda massa namespace. En annan sak skulle exempelvis vara att du på varje sida behöver kontrollera om användaren är inloggad, eller kanske att du vill skriva ner till databasen vilken sida en användare besöker för att göra statistik på hur många besökare varje sida har.

Som du ser finns det många frågor redan initiellt som kan vara intressanta att få svar på. I detta fall är just alternativet att ärva från en basklass som du använder. Vi går därför in på detaljer hur detta skulle kunna gå till.


Vi börjar med aspx-sidan

När du skapar en ny aspx-sida, oavsett om det är c# eller vb så kommer i code-behind sidans kod att presentera följande:


Public Class defaultabout
Inherits System.Web.UI.Page


Den koden känner du säkert igen. Vad som händer här är egentligen att vi hämtar upp och sätter referensen till page-klassen så man kan använda de rutiner och funktioner som finns att tillgå för just den kod som skrivs på aspx.vb-sidan, dvs code behind.

Det vi kan göra är att vi ärver från en klass som är en helt vanlig klass som vi själva skriver och med denna teknik får vi möjligheter att skriva egna rutiner. Vi går vidare för att skriva en sådan klass.


Skriv en egen bas-klass

Enklast är att skapa en ny klass-fil. Detta gör du genom att högerklicka på ditt webbprojekt och från den menyn väljer 'add' och därefter 'add class'. Du får nu en fil som du kan döpa till pagebase.vb. I denna filen står inget annat än just att klassen heter pagebase.


Public Class pagebase

End Class


Det vi skall göra nu är att i denna klass göra precis samma sak som varje codebehind sida gör, nämligen ärva page-klassen, så vi lägger till denna kod.


Public Class pagebase

Inherits System.Web.UI.Page

End Class


Nu har vi en klass som heter pagebase, denna klass ärver från UI.Page vilket gör att den kod som står på code behind sidan blir onödig, men en sak måste göras till. Vi måste på code-behind sidan ersätta Inherits och faktiskt ärva från pagebase istället för UI.Page. I mitt exempel så döpte jag min solution till artikar, så därför måste jag ange detta även i koden. Så här ser det ut då:


Public Class WebForm1
Inherits artiklar.pagebase

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Put user code to initialize the page here
End Sub

End Class



Vad innebär detta?

Som ni ser nu så när programmet körs, kommer alltså klassen pagebase att köras. Ingenting kommer hända just nu, men om vi nu lägger in en subrutin -new() och sätter en break på den så kommer ni se att innan sidan visas så kommer programmet stanna just i denna klass.


Public Class pagebase

Inherits System.Web.UI.Page

Public Sub New()

End Sub
End Class


Med detta vill jag bara visa att vi faktiskt skrivit en rutin som gör att den eller de aspx-sidor du vill kommer köras varje gång någon besöker en specifik sida. Här kanske du nu börjar se möjligheterna att faktiskt börja skriva rutiner som bara behöver förekomma på ett enda ställe, vilket är vårt mål.

Vi går vidare, vad kan vi göra mer?


Funktioner som nås utan namepace

Om vi tar ett exempel att vi vill kontrollera om användaren är inloggad så kanske vi skriver en klass som kan användas, men i detta fall är det en funktion som jag bara vill nå på sid-nivå, alltså inte i andra klasser eller rutiner. Det kanske inte är det bästa exemplet men visar i alla fall att man kan göra det. Ett klokare exempel kanske är att logga till databasen vilken sida man kör och skriver ner det till databasen, men vi börjar med en enkel rutin så länge.


Public Class pagebase

Inherits System.Web.UI.Page

Public Sub New()

End Sub

Public Function IsLoggedIn() As Boolean

' är användaren inloggad?

If Session("userid") > 0 Then
' inloggad
Return True
Else
' inte inloggad
Return False
End If

End Function

End Class


Om ni nu skall nå denna rutin från vår codebehind sida behöver vi inte ange något namespace utan kan använda funktionen direkt, exempelvis såhär:


Public Class WebForm1
Inherits artiklar.pagebase

#Region " Web Form Designer Generated Code "

'This call is required by the Web Form Designer.
Private Sub InitializeComponent()

End Sub

'NOTE: The following placeholder declaration is required by the Web Form Designer.
'Do not delete or move it.
Private designerPlaceholderDeclaration As System.Object

Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: This method call is required by the Web Form Designer
'Do not modify it using the code editor.
InitializeComponent()
End Sub

#End Region

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Put user code to initialize the page here

If IsLoggedIn() = False Then
Response.Redirect("/login.aspx")
End If

End Sub

End Class



När skall jag använda detta?

Som du kanske förstått av artikeln så handlar det om att istället för att på varje sida skriva massa funktioner eller kod som skall köras. Att i stället ärva från en basklass kan du skriva rutinerna där och kommer köras varenda gång användaren besöker sidan. Alternativet hade varit att skriva anrop till funktioner på varje code-behind sida, nu behöver du alltså inte det.

Det enda du behöver göra är alltså att se till att du på din code-behind sida ärver från basklassen istället för UI.Page så får du tillgång till dessa rutiner. Jag tror att när du funderat en stund så ser du att det finns massa rutiner du skulle kunna lägga upp där, likaså nyttja för allehanda roliga rutiner och funktioner.


Avrundning

Att göra rutiner som dessa är ganska enkla men effektiva och kan vara en bra start på att faktiskt se till att minska mängden kod och istället samla upp rutiner som körs centralt och istället nyttja tekniken som finns att tillgå. Jag hoppas du får lite ideer av detta och kommentera gärna, och skulle du ha tid - rösta gärna på artikeln också vilket ger mig feedback på om du gillade artikeln eller inte. Lycka till med din nästa webbsite.
Upp

7 Kommentarer


  1. Pelle Johansson
    2 okt 2005

    Har du använt denna teknik och har förslag eller synpunkter. Kom gärna med kommentarer.


  2. Magnus Gustafsson
    18 okt 2005

    Vi har skapat en basklass som har som uppgift att kontrollera vilken användare som är inloggad och sedan kolla i databasen om en användare har admin-rättigheter i applikationen. Alla aspx-sidor i asministrationsdelen ärver sedan från denna basklass, väldigt användbart. Ngn som har tips på fler funktioner som passar bra att lägga i en basklass?


  3. Simon Karlsson
    17 nov 2005

    Kan tillägga att med en: Private Sub MyBaseLoad(ByVal s As Object, ByVal e As EventArgs) Handles MyBase.Load ---Din kod end sub så kan baseclass även användas som en header. Session, request, response blir tillgängligt.


  4. Dick Andersson
    12 feb 2007

    Kan denna metod appliceras på usercontrols åxå?? Ex i min BaseClass.cs har jag en funktion för att skapa en DBconnection, denna ska användas i ett antal av mina Usercontols. Går det då att från ascx filen ärva så att man får samma funktionalitet som i ditt IsLoggedIn() exempel??


  5. Pelle Johansson
    13 feb 2007

    Hej Dick, ja det kan den - dock ärver en usercontrol från Inherits System.Web.UI.UserControl så du får se till att din egna klass också gör det då


  6. Dick Andersson
    13 feb 2007

    Ahh, så jag bör göra en baseclass specifik för usercontrols som ärver från System.Web.UI.UserControl? Jag har sen tidigare en baseclass.cs som mina codebehind ärver ifrån.


  7. Pelle Johansson
    13 feb 2007

    tycker jag låter bra. sen kan ju den ärva page också förstås

Skriv en kommentar på artikeln

Ditt betyg på artikeln



Kommentar:





Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 153
27 952
271 704
851
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies