Artiklar » .NET 4.0 » Kör kod automatiskt i ASP.NET Web Pages

 
 

Kör kod automatiskt i ASP.NET Web Pages

Författare: vimpyboy
Datum: den 7 juli 2010
Antal lästa: 3465
Ej stjärnmärkt

Ibland händer det att man vill köra någon kod antingen direkt när webbsajten körs för första gången eller varje gång en sida laddas. I ASP.NET MVC kan vi göra det förstnämnda i global.asax, och vi kan använda ActionFilters för att köra kod antingen när innan en sida laddas, eller efter att den har laddats.

Kör kod när sajten startas
Då vi inte har någon global.asax eller controllers i vårt ASP.NET Web Pages-projekt där vi då skulle köra det så finns det istället ny funktionalitet för att enkelt köra det på samma sätt som vi kör all annan kod.

När den första besökaren laddar en sida för första gången så vill vi sätta ett datum i en global variabel. Vi vill sedan komma åt den i valfri sida.

För att göra det här så kan vi skapa en sida vid namn _start.cshtml. Som jag har nämnt i artikeln ”Introduktion till ASP.NET Web Pages” så kan vi inte surfa direkt till sidor vars namn börjar med ett understreck. Vi kan därför inte surfa direkt till den här sidan, utan den körs bara vid första sidladdningen.

I den här filen så plockar vi bort all HTML och lägger sedan till det här:

Kod:
@{
  AppData["timeStarted"] = DateTime.Now.ToLongTimeString();
}



AppData är en variabel som innehåller globala variabler för vår sajt. Vi skapar sedan en ny fil vid namn default.cshtml där vi lägger till det här:

Kod:
Sajten startades @ApplicationInstance.Application["timeStarted"]




När vi sedan surfar till default.cshtml så kan vi se att vi får upp den aktuella tiden. Uppdaterar vi sedan sidan så är det exakt samma tid som vi hade alldeles nyss då sajten inte har startats om. Om vi i Web Matrix klickar på Restart i ribbon-menyn så startas IIS Express om, vilket gör att även sajten startas om. Uppdaterar vi nu sidan så kan vi se att ett nytt datum då dyker upp.

Kör kod vid varje sidladdning
Förutom att köra kod när sajten startas kan det hända att vi vill köra kod före och efter en sida laddas, för att t.ex. kunna logga det.

För att köra kod före och efter sidladdningen så skapar vi en ny fil med namnet _init.cshtml. Skriver vi kod här kommer den automatiskt att köras innan sidan laddas.

Vi börjar med att lägga till det här i sidan:
Kod:
<p>Det här körs innan sidan laddas!</p>



När vi nu kör någon sida så kan vi se att det här läggs till automatiskt på toppen av sidan. Vi behöver inte ha HTML här, utan kan istället ha t.ex. C#-kod med Razor-syntaxen.

Efter att _init.cshtml har körts så körs sedan sidan vi surfade till automatiskt. Vi kan dock själva välja när den sidan skall köras genom att anropa RunPage() i _init.cshtml. Lägger vi kod efter det anropet så kommer den att köras när sidan är färdigladdad.

Ett exempel på det där vi dessutom automatiskt sätter LayoutPage kan se ut så här:

Kod:
<p>Det här körs innan sidan laddas!</p>
@{
  LayoutPage = "~/_Layout.cshtml";
  RunPage();
}
<p>Det här körs efter sidan laddas!</p>



Default.cshtml som vi sedan kör ser ut så här:

Kod:
Sajten startades @ApplicationInstance.Application["timeStarted"]



Och _Layout.cshtml har det här utseendet:

Kod:
<!DOCTYPE html>
<html>
  <head>
  <title>Layout</title>
  </head>
  <body>
  @RenderBody()
  </body>
</html>



Nu sätts layout-sidan automatiskt för alla cshtml-sidor, vilket gör att vi får en väldigt enkel default.cshtml där vi inte behöver använda någon C# alls för att ändå få en layout-sida. Vi får även fram den HTML vi angav i _init.cshtml automatiskt före och efter vår sida.
 
     

  » Logga in  
 
Användarnamn

Lösenord

 
     

  » Bli medlem  
  Bli medlem på ASPsidan!  
     

     
  Microsoft  
     

  » Partners  
  Comsolvia  
     
  » ANNONS  
  ingen annons än  
     

  » Senast online  
  Endast för inloggade  
  Antal inloggade: 2  
     

Copyright © 2007 www.ASPsidan.se
ingen sponsrar längre ASPsidan med Dedikerad Server
ASPsidan RSS
   
 XHTML / CSS
Det tog 0,1250 sekunder att ladda sidan