Her i 2.del af denne artikel vil vi samle brikkerne. Vi skal primært arbejde med Web User Controls. Vi vil arbejde videre med tabelle i Eksempel 1. Vi vil tilføje Controls til Tabellen som er rammen for alt indhold på siden.
Alle præsentationslags koder på Codebehind.dk på nær default siden default.aspx er gemt som Web User Controls.
Informationer om hvordan disse moduler skal placeres på en side er
gemt i en database. Med et felt til orden, et flet til filnavn og et
felt til hvilken Html Server Control den skal placeres i.
Ved at gennemløbe Recordsettet i en løkke kan man dynamiske tilføje de forskellige moduler til template hoved siden.
Pseudo kode:
for each PortalModuleControl
Control parent = Page.FindControl ( Html_Server_Control_Name);
Control module = Page.LoadControl(filename);
parent.Controls.Add(module);
next
Her er naturligvis tale om en grov forenkling af den faktiske kode idet jeg ønsker at vi skal focuserer på de tre funktioner FindControl, LoadControl og Controls. Add. Ønsker du at se hvordan det virkeligt går for sig kan du kigge i dokumentationen til IbuySpy Portalen
FindControl tager en tekst-streng som argument og er nødvendig for at få en reference til Html Server Control'en.
Resten siger vel sig selv.
I Eksempel 2 vil vi som sagt tilføje User Controls til vores Tabel.
Istedetfor at tilføje controllen i Page_Load vil vi gøre det i Page_Init. Grunden til dette er at der ellers kan opstå konflikter mellem statiske og dynamiske tilføjede kontroller og deres propeties. Emner som "Web Forms Page Processing" og "Web Forms State Management" fortjener nok en dybere udredning men kræver også en dybere forståelse fra min side, så her må jeg henvise til FrameWork SDK som går i dybden med disse emner.
Til Eksempel 2. skal vi bruge en simpel Web User Control
WebUserControl2.ascx
<%@ Control Language="C#" %>
<script runat="server">
string _Overskrift = "Udefineret Overskrift";
public string Overskrift
{
get { return _Overskrift; }
set { _Overskrift = value; }
}
</script>
<h2><%= Overskrift %></h2>
her er teksten til denne simple Web User Control
Web User Control'en er udstyret med en proberty "Overskrift" . Det er vigtigt at huske control diriktivet for sprog. - Language="C#".
Nu er vi klar til at indsætte User Control'en på siden.
void Page_Init(Object Src, EventArgs E ) {
Page.FindControl("LeftCell").Controls.Add(Page.LoadControl("WebUserControl2.ascx"));
Control kontrol = Page.LoadControl("WebUserControl2.ascx");
kontrol.GetType().GetProperty("Overskrift").SetValue(kontrol, "Min Overskrift", null);
RightCell.Controls.Clear();
RightCell.Controls.Add(kontrol);
}
Først indsættes Control'en i LeftCell. Her bruger vi FindControl for eksemplets skyld.
Anden gang opretter vi først en reference til Control'en . Vi skal nemlig bruge denne reference til at sætte egenskaben Overskrift. Inden vi tilføjer Control'en renses RightCelle for det indhold der er i den i forvejen med Controls.Clear(). Det samme kunne have været gjort med RightCell.InnerHtml = "";