ASP.NET Tutorial, Part 13 - Brugerkontroller

Tags:    asp.net
Skrevet af Bruger #7741 @ 09.08.2005
Der er mange muligheder for at benytte kodegenbrug i ASP.NET - herunder de objektorienterede muligheder i de forskellige .NET-sprog og brugen af standard kontroller som vi har set på i de sidste lektioner. En af de meget effektive muligheder for at kunne benytte genbrug af eksisterende kode er muligheden for at skabe egne kontroller.

I ASP.NET kan det gøres på flere måder, idet det både er muligt at skabe deciderede serverkontroller (som er kompilerede DLL-filer indeholdende kontroller), og simple brugerkontroller som udviklingsmæssigt er meget nemme at have med at gøre.

Det ligger uden for denne series rammer at tale om deciderede kompilerede serverkontroller, men i denne lektion skal vi kigge på hvordan man nemt kan udvikle en simpel brugerkontrol.

Princippet bag brugerkontroller


Meningen med brugerkontroller er at udvikle selvstændige kontroller som kan tilgås fra alle andre ASP.NET-sider.

En brugerkontrol kan bestå af ren HTML - eksempelvis tekst som skal fremgå på hver eneste side i et site. Skal teksten på et tidspunkt opdateres, kan man nøjes med at opdatere HTML-koden i brugerkontrollen hvorefter alle sider som benytter kontrollen, vil være tilrettet. Men en af de helt store fordele ved brugerkontroller (eller ASCX-filer som de også kaldes fordi de gemmes i en .ascx-fil) er, at de ikke blot behøver bestå af statisk indhold, men også kan være dynamiske. De kan nemlig bestå af både andre kontroller og kode, og sproget kontrollen benytter, behøver ikke nødvendigvis at være det samme sprog som benyttes på den side som udnytter kontrollen. Man kan således godt benytte en C#-kontrol på en VB.NET-side.

Hvis man i forbindelse med udvikling af et nyt site på forhånd kan separere forskellige elementer som gentages på flere eller alle sider, kan man med fordel benytte brugerkontroller fordi det i høj grad letter både udvikling, test og vedligeholdelse. Man kan eksempelvis udvikle brugerkontroller til at repræsentere en dynamisk top eller bund på hver side, en tabel med data fra en database hvor formatet er fastlagt på forhånd, eller en del af en formular som gentages på flere sider (eksempelvis indtastning af navn og adresse).

Lad os se på et simpelt eksempel.

Simpel menu


Forestil dig, at du skal udvikle et site med en simpel menu i toppen af siden som eksempelvis følgende menu placeret på forsiden:

Bøger Musik Film Kontakt

Hvis man bevæger sig ned i sitet, åbner en undermenu med mulighederne, og top-menuen ændres således at man nemt kan finde retur til forsiden:

Til forsiden Bøger Musik Film Kontakt

Top-menuen kan eksempelvis skabes ved at benytte en samling Hyperlink-kontroller, og den kontrol som indeholder link til forsiden, vises kun hvis man ikke befinder sig på forsiden. Koden til at styre dette kan skrives i Page_Load()-rutinen. Hvis man ikke benytter en form for kodegenbrug, skal både koden i Page_Load() og Hyperlink-kontrollerne gentages på alle sider.

Den største ulempe ved denne metode er, at en eventuel fremtidig ændring i menustrukturen betyder at alle sider skal tilrettes, og sitet er derfor svært at vedligeholde.
Benyttes i stedet en brugerkontrol, kan både menuen og koden indkapsles i en separat fil, som efterfølgende kan bruges på alle andre sider. Brugerkontrollen kunne eksempelvis bestå af følgende kode:

Fold kodeboks ind/udKode 


Nu er både menuen og koden som kun viser link til forsiden på undersider, indkapslet i en separat brugerkontrol, og er dermed nemme at vedligeholde i fremtiden. Filen kan eventuelt gemmes under navnet menu.ascx (bemærk at filen hedder ascx - ikke aspx).

Denne fil kan benyttes på andre "almindelige" aspx-sider ved at man først registrerer kontrollen ved hjælp af en opmærkning i toppen af siden og efterfølgende placerer den hvor man ønsker det.

Registreringsopmærkningen kan se således ud:
Fold kodeboks ind/udKode 

Egenskaben TagPrefix kan bruges til at gruppere flere kontroller - eksempelvis et firma- eller projektnavn. TagName-egenskaben er selve kontrollens navn, og Src-egenskaben er en reference til selve filen.

Tilbage er nu blot at placere en eller flere instanser af kontrollen på siden som følger:

Fold kodeboks ind/udKode 


Når default.aspx hentes, vil der ikke være et link til forsiden - den ser således ud:

Figur 1 Når forsiden (default.aspx) hentes, findes der ikke et link til forsiden

Dannes en side kaldet bøger.aspx med samme kode som default.aspx, vil linket til forsiden være tilgængeligt:


Figur 2 På alle andre sider end forsiden findes et link til forsiden

I dette eksempel er der med vilje benyttet to instanser af kontrollen (i top og i bund) - det er naturligvis helt valgfrit hvor mange instanser man ønsker.

Som det fremgår, er der mange fordele ved brug af brugerkontroller:


  • Det er nemt at foretage ændringer på mange sider fordi rettelserne kun behøver foretages i én fil (brugerkontrollen) hvorefter de sider som benytter kontrollen, automatisk er opdateret.

  • Kontrollen er en indkapslet og selvstændig enhed, og dermed nem at både bruge og vedligeholde.

  • Det gør det meget nemmere at være flere om at udvikle et site (Anders tager sig af en menu-kontrol, Lise af en kontrol til at klare login, og Svend laver en kontrol til indtastning og validering af navn og adresse).

  • Det er muligt at benytte brugerkontroller skrevet i flere forskellige .NET-sprog på samme side.

  • Kontrollen er nemmere at skrive fordi man kan koncentrere sig om en konkret og specifik opgave, og man kan nemt teste kontrollen i et simpelt testmiljø væk fra produktionsserveren.

  • Sluttelig er det, som vi skal se i næste lektion, muligt at skrive en kontrol som benytter objektorienterede begreber som egenskaber og metoder.



Arbejder man i Web Matrix, er udvikling af brugerkontroller meget nemt.

Start med at oprette den eller de sider som skal benytte kontrollen. Tilføj herefter en ASP.NET user control fra New File på File-menuen, og tilføj HTML, kontroller og eller kode. I vinduet Workspace i højre side af udviklingsmiljøet vælges den mappe hvor den nye brugerkontrol er gemt, og man kan nu blot trække kontrollen ind på en ASPX-side. Web Matrix vil så sørge for at tilføje en reference til kontrollen i toppen af ASPX-siden, og oprette en instans af kontrollen.


Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.

Del også gerne artiklen med dine Facebook venner:  

Kommentarer (0)

Du skal være logget ind for at skrive en kommentar.
t