Avatar billede forceprogrammer Nybegynder
26. januar 2005 - 16:34 Der er 14 kommentarer og
1 løsning

Problem med load/unload af usercontrol

Jeg har et problem med at jeg gerne vil vide om en usercontrol er blevet kaldt af en lokal postback hvis man kan sige det på den måde.
Problemet er at jeg har en aspx-side der loader udercontrols på baggrund af hvad brugeren trykker på.
Dvs. siden bliver kun loadet en gang og herefter en masse postback.
Mit problem er altså at jeg mangler en metode der kan sige mig om det er første gang page_load bliver kaldt kaldt på en userControl, og ikke globalt på hele siden da denne jo bliver postet tilbage mange gange.
Jeg håber jeg har gjort mig nogenlunde forståelig.

Er der nogle der kan hjælpe mig med dette problem?
Mvh
Avatar billede forceprogrammer Nybegynder
26. januar 2005 - 16:42 #1
Faktisk er det fordi jeg i toppen af siden ude på aspx siden har nogle linkbuttons der laver postback.
Når der så trykkes på søg-knappen og søge-usercontrollen skal loades ind er det jo så et postback fordi linkbutton laver et postback.
Men det er jo altså første gang usercontrollen loades og jeg skal bruge noget ala if(!isPostBack) hvilket ikke virker da det jo netop nu er en postback....
Avatar billede burningice Nybegynder
26. januar 2005 - 17:31 #2
hmm.. tja.. du kan vel lave en form for counter i din usercontrol som du tæller op hver gang control'en loades. Ud fra den tæller kan du jo se om det er første gang
Avatar billede forceprogrammer Nybegynder
26. januar 2005 - 17:53 #3
Der findes ikke noget standard?
Den counter bliver vel nulstillet ved hvert load?
Så jeg skal putte den i sessionsvariablen?
Avatar billede burningice Nybegynder
26. januar 2005 - 18:11 #4
du kan gemme counteren i ViewState... tror det vil være mest logisk.
Avatar billede burningice Nybegynder
26. januar 2005 - 18:13 #5
og nej, der findes ikke noget standard, da det ikke er et standard scenario.

Typisk vil man bruge forskellige url's for de forskellige controls.

Set nu at du gerne vil give mig et link hvor jeg kan se din søgeside. Hvordan vil du linke til den exacte side? Det kan du ikke, og vupti er vi havnet i samme dødsfælde som flash har.
Avatar billede forceprogrammer Nybegynder
26. januar 2005 - 18:50 #6
Ideen i det er at lave et modulopbygget grænsefladelag som er letoverskueligt og letmodificerbart.
Det opnås netop ved at bygge user controls som kan puttes ind og genbruges rundt omkring.
Avatar billede burningice Nybegynder
26. januar 2005 - 19:02 #7
det modsiger jeg dig heller ikke i.. det er mere hvordan det bestemmes hvilke kontroller der skal vises.

Forestil dig 10 forskellige kontroller med hver deres 10 underkontroller. Du står nu på en nyhedsside med et bestemt nyhed omkring røde mus der har angrebet kænguruer. Alle links man har trykket på for at komme til denne sige har været baseret på postbacks, og man står nu og gerne vil bookmarke siden. Hvordan gør man det?
Avatar billede forceprogrammer Nybegynder
26. januar 2005 - 19:31 #8
ja, det har du helt ret i. Det er en stor ulempe ved det...
men okay...det bliver ikke relevant i denne applikation...Men absolut en god pointe :)
Avatar billede forceprogrammer Nybegynder
26. januar 2005 - 19:50 #9
Er det muligt på en eller anden måde at ændre postback funktionen, således at hvis en knap på en usercontrol trykkes ned sørger denne knaps postbackfunktion for at ændre et pagenumber i viewstaten således at når hovedsiden, altså aspx sidens load_page som det første bliver kaldt kigger i viewstaten og nu ser hvilken side der skal loades på baggrund af hvad der ligger i viewstaten...og er lagt der af postbackfunktionen.

Eller er der mon en smartere måde at gøre det på?
Avatar billede forceprogrammer Nybegynder
26. januar 2005 - 20:08 #10
Altså jeg vil flytte controlleren således at det ikke er en page-controller men faktisk en front-controller der styrer tilgangen til alle sider.
Hvordan gør jeg det nemmest i dotnet.

Umiddelbart, og som jeg også er gået igang med er at lave usercontrols der bliver switchet ind. En page sendes med i querystring som bliver interceptet i I hovedfilen, altså den aspx-fil der indeholder usercontrols. I denne fils page_load bliver den interceptet, hvorefter den bruger denne page til at loade en bestemt usercontrol ind. Dette bestemmes via en switch-case struktur som jeg har lagt i en seperat klasse der hedder controller.

Problemet er altså bare at dotnet jo gør brug af events og postback hvis man skal bruge de standard knapper der er. Det gør at jeg ikke rigtig kan sende et pagenummer med.
Så spørgsmålet er hvad der er den smarteste måde at gøre det på?
Avatar billede burningice Nybegynder
26. januar 2005 - 20:12 #11
uhm... well...

ViewState er jo egentlig bare en hashtabel som bruges på denne måde:

ViewState["noget"] = "noget andet";

så du kan vel i teorien gøre sådan her i usercontrollen:

ViewState[this.GetType().Name] = ViewState[this.GetType().Name]+1;
ViewState["shallLoad"] = this.GetType().Name;

På aspx-siden kan du så tjekke hvad der skal loades og hvor mange gange den har være loadet:

string controlToLoad = ViewState["shallLoad"];
string howManyTimesHasLoaded = ViewState[controlToLoad];
Avatar billede forceprogrammer Nybegynder
26. januar 2005 - 20:17 #12
Mmm du mener jeg skal gøre det hvor i usercontrollen? I selve knapeventet? Det kan vel ikke lade sig gøre da den jo først bliver loadet bagefter jeg skal bruge informationen...eller mener du i page_load?
Avatar billede burningice Nybegynder
26. januar 2005 - 22:16 #13
efter at have læst dit indlæg fra 26/01-2005 20:08:40 er jeg helt lost... jeg kan virkelig ikke se din problematik

hvad er der galt i at have en url som denne

default.aspx?control=soeg
eller
default.asxp?control=news&newsid=5
Avatar billede forceprogrammer Nybegynder
27. januar 2005 - 12:54 #14
mange tak. Læg et svar
Avatar billede burningice Nybegynder
27. januar 2005 - 13:06 #15
well, okay... gjorde mit bedste, håber du kan bruge det til noget :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester