Arkitekturjämförelse av ASP.NET webbformulär och Blazor
Dricks
Det här innehållet är ett utdrag ur e-boken, Blazor för ASP NET Web Forms Developers for Azure, tillgängligt på .NET Docs eller som en kostnadsfri nedladdningsbar PDF som kan läsas offline.
Även om ASP.NET webbformulär och Blazor har många liknande begrepp finns det skillnader i hur de fungerar. I det här kapitlet beskrivs de inre funktionerna och arkitekturerna i ASP.NET Webbformulär och Blazor.
ASP.NET Web Forms
Ramverket ASP.NET Web Forms baseras på en sidcentrerad arkitektur. Varje HTTP-begäran om en plats i appen är en separat sida som ASP.NET svarar på. När sidor begärs ersätts innehållet i webbläsaren med resultatet av den begärda sidan.
Sidorna består av följande komponenter:
- HTML-kod
- C# eller Visual Basic-kod
- En kod bakom-klass som innehåller logik- och händelsehanteringsfunktioner
- Kontroller
Kontroller är återanvändbara enheter i webbgränssnittet som kan placeras programmatiskt och interageras med på en sida. Sidorna består av filer som slutar med .aspx som innehåller markering, kontroller och viss kod. Kod bakom klasserna finns i filer med samma basnamn och ett .aspx.cs - eller .aspx.vb-tillägg , beroende på vilket programmeringsspråk som används. Intressant nog tolkar webbservern innehållet i .aspx filer och kompilerar dem när de ändras. Den här omkompileringen sker även om webbservern redan körs.
Kontroller kan skapas med markering och levereras som användarkontroller. En användarkontroll härleds från UserControl
klassen och har en liknande struktur som sidan. Markering för användarkontroller lagras i en .ascx-fil . En tillhörande kod bakom-klass finns i en .ascx.cs- eller .ascx.vb-fil. Kontroller kan också skapas helt med kod genom att ärva från antingen basklassen WebControl
eller CompositeControl
.
Sidor har också en omfattande händelselivscykel. Varje sida genererar händelser för initiering, inläsning, prerender och avlastning av händelser som inträffar när ASP.NET körning kör sidans kod för varje begäran.
Kontroller på en sida skickas vanligtvis tillbaka till samma sida som visade kontrollen och bär med sig en nyttolast från ett dolt formulärfält med namnet ViewState
. Fältet ViewState
innehåller information om tillståndet för kontrollerna när de återges och visas på sidan, vilket gör att ASP.NET-körningen kan jämföra och identifiera ändringar i innehållet som skickas till servern.
Blazor
Blazor är ett webbgränssnittsramverk på klientsidan som liknar JavaScript-ramverk på klientsidan som Angular eller React. Blazor hanterar användarinteraktioner och återger nödvändiga uppdateringar av användargränssnittet. Blazorbaseras inte på en modell för begärandesvar. Användarinteraktioner hanteras som händelser som inte finns i kontexten för en viss HTTP-begäran.
Blazor appar består av en eller flera rotkomponenter som återges på en HTML-sida.
Hur användaren anger var komponenter ska återges och hur komponenterna sedan kopplas upp för användarinteraktioner är värdmodellspecifika .
Blazorkomponenter är .NET-klasser som representerar en återanvändbar del av användargränssnittet. Varje komponent upprätthåller sitt eget tillstånd och anger sin egen återgivningslogik, som kan omfatta återgivning av andra komponenter. Komponenter anger händelsehanterare för specifika användarinteraktioner för att uppdatera komponentens tillstånd.
När en komponent har hanterat en händelse Blazor renderar komponenten och håller reda på vad som har ändrats i de renderade utdata. Komponenter återges inte direkt till dokumentobjektmodellen (DOM). De renderas i stället till en minnesintern representation av DOM som kallas en RenderTree
så att du Blazor kan spåra ändringarna. Blazor jämför de nyligen renderade utdata med föregående utdata för att beräkna ett gränssnitts-diff som sedan tillämpas effektivt på DOM.
Komponenter kan också manuellt ange att de ska återges om deras tillstånd ändras utanför en normal användargränssnittshändelse. Blazor använder en SynchronizationContext
för att framtvinga en enda logisk körningstråd. En komponents livscykelmetoder och eventuella händelseåteranrop som genereras av Blazor körs på den här SynchronizationContext
.