Jag laddar in en UC på min sida med denna kod med två propertys: Vad exakt vill du uppnå? (Reflection känns lite bökigt?) Dessutom, titta över casingen på dina UC:s; egenskaper ska ha stor bokstav i början för att följa namnstandard :) Vad jag vill åstadkomma... Jag vill ha en UserControl som visar ett blogginlägg som inte är kopplad till grunddesignen med rundade hörn m.m. utan min UC ska bara visa en specifik del som ska gå att återanvända på alla tänkbara ställen. Därför innehåller inte min UC någon bakgrundsfärg, ramar m.m. utan detta är placerat i min .aspx-fil som laddar in UC:n. Okej, hur som haver.. :) Tack Oskar... PreRender löste allt... Har suttit i över en vecka för att hitta en lösning på detta...UserControls med propertys.
Control ShowBlogg = LoadControl("~/UserControls/ShowBlogg.ascx");
Type bloggID = ShowBlogg.GetType();
PropertyInfo propID = bloggID.GetProperty("bloggID");
propID.SetValue(ShowBlogg, bloggID, null);
Type myType = ShowBlogg.GetType();
PropertyInfo propType = bloggID.GetProperty("tagg");
propType.SetValue(ShowBlogg,"tags",null);
phBlogg.Controls.Add(ShowBlogg);
Den skickar med ID och taggen,. Sen vill jag då få en retur på rubriken, då la jag till koden:
Type headline = ShowBlogg.GetType();
PropertyInfo propHeadline = headline.GetProperty("headline");
HeadLine.Text = propHeadline.GetValue(ShowBlogg, null).ToString();
...med hopp om att den skulle fånga upp rubriken i min "aspx.cs"-fil. När jag debuggar så går den fint över till "SET" när jag anger propertyn, och när jag vill hämta rubriken så passerar den "GET" i min UC...
När jag provar koden så har jag sett en breakpoint i .aspx.cs-filen i slutet på min Page_load-event, långt innan "phBlogg.Controls.Add(ShowBlogg);" och nästa är när jag hämtar ifrån db:n i UC:n. UC-koden körs då först efter att "page_load"-eventet har körts. Hur kan man lösa detta? Har kollat på "Interface", men får inte någon riktig kläm på hur det används bäst i praktiken...Sv: UserControls med propertys.
Sv:UserControls med propertys.
Vad innebär detta... Rubriken för delsidan sätts i .aspx-filen och dess tilhörande bakgrund för blogginlägget. Title och MetaTaggar sätts efter rubriken för att blidka vissa sökmotorer.
Det jag kommit fram till är att UC'ns kod körs först efter Page_load-eventet är avklarat i min .aspx-fil. Eftersom den körs efter Page_load så kan jag inte hämta propertyn för rubriken och presentera på min sida om jag inte gör ett seprat anrop till db:n för att enbart hämta rubriken. Detta vill jag helst undvika. Så att jag skulle helst vilja tvinga UC:ns kod att köras vid phBlogg.Controls.Add(ShowBlogg); eftersom jag då kan fånga Propertyn längre ner i koden...
Designen är inte jag som har gjort... utan jag fyller den med innehåll. Namnen, jepp... håller på att lära mig den underbara världen som C# är... och har inte kommit fram till hur namnstandarden är fullt ut.Sv: UserControls med propertys.
Du skulle kunna vänta i aspx-filen med att plocka ut alla dina egenskaper till PreRender-eventet, det körs "mellan" Load-eventen och Render-eventen, och skulle vara idealiskt att använda här tror jag.
Namnstandarden är, smått förenklad, ungefär såhär:
Properties: Stor bokstav på varje nytt ord
Metoder: Samma
variabler: Liten på första ordet, resten stort
Lycka till :)Sv:UserControls med propertys.