Avatar billede dch Nybegynder
11. februar 2005 - 00:17 Der er 7 kommentarer og
1 løsning

Funktioner kaldes efter Page_Load.

Hej eksperter,

Jeg er ved at udvikle en applikation, og vil gerne bevare en OO struktur. dvs jeg gerne ser at klasser/usercontrols kalder hinanden vha metode kald når data skal sendes rundt. er ikke så hooked på hele "Form-Post/Get" strukturen. :)

Jeg har dog et problem. Nogle elementer (fx knapper) udfører update funktioner i databasen, som så gerne skulle vises flere steder på siden efter postback. Problemet hermed er at knappens OnClick udføres EFTER postback. Siden genereres derfor inden opdateringen, og denne vises derfor ikke.

En måde at løse dette på, kunne være at indføre noget Delegate/notify til at bede andre usercontrols om at opdatere deres inhold...

Andre ideer?

På forhånd, tak! ;)
Avatar billede snepnet Nybegynder
11. februar 2005 - 07:53 #1
hej dch :o)

normalt anbefales det at implementere efter følgende model :

// opbygning af siden :
if(!IsPostBack)
{
  // kun første gang siden vises
  DataBind();
}

// i eventhandlers der manipulerer data
...Gør hvad der skal gøres
DataBind();

Du vil så typisk have din egen databindingsrutine, som du kan lade kalde - hvad der nu er nødvendigt at kalde - for at få opdateret dine kontroller.

Der kan sagtens være argumenter for at bruge en anden model.

mvh
Avatar billede dch Nybegynder
11. februar 2005 - 13:56 #2
Regnede også med at høre fra dig specifikt. Har læst mange .Net tråde hvor du næsten hver gang kommer med et kvallificeret bud. :)

Tja, er nu ikke helt sikker på du forstår - ellers er det bare mig. Prøver at udtrykke det anderledes:

Dette er event-rækkefølgen i en ASP.NET applikation (som du nok ved):
Page_Init (State genoprettes)
Page_Load (typisk til at opbygge siden) Event med IsPostback check)
Validation (Validering foretages, og kan checkkes)
Event Handling (Control events håndteres)
Cleanup (Siden klargøres til destruction)

Mit problem er flere at mine Controls kunne have behov for at vise samme date.
Når jeg så i en specifik UserControl Klikker på en knap (Vil foregå efter PageLoad ved næste postback) som foretager en opdatering i databasen, er det intet problem at bede det specifikke UserControl om at opdatere UIen der.

Problemet ligger bare i de andre controls der kunne tænkes at vise samme data. disse vil jo på den ene eller den anden måde opbygge siden i forbindelse med mindre jeg opbygger en DELEGATE/NOTIFY struktur. Derved viser de data før denne faktisk er gemt i databasen - og vil derfor vise en "ikke opdateret udgave". :)

Ja, det er et problem der kunne løses ved at forenkle applikationen - men hvor ligger det sjove i det? :p

PS. du skriver om at have en egen databindings rutine. Mener du at hver UserControl skal udstyres med en "public void UpdateUI()" funktion? Dette er nemlig også tilfældet. Problemet er bare at siden er dynamisk, så mine UserControls kommer og går. Derfor er et statisk kald fra PAGE til disse ikke en mulighed...
Avatar billede snepnet Nybegynder
11. februar 2005 - 20:53 #3
hej igen :o)

hvis det er event i dine brugerkontroller der kan medføre at andre brugerkontroller skal opdateres, er det eneste rigtige nok at gøre det eventbaseret.

hvis det er events på formen der kan resultere i en ændring af én eller flere kontroller - kunne du gøre det ved at cykle igennem de kontroller du har sat ind på siden - og kalde en opdatering på dem.

det vil nok under alle omstændigheder være en fordel for dig - ikke at gøre det specifikt på en kontroltype, men pr. interface eller pr. base.

hvis du f.eks. sætter dine kontroller ind i et panel.

foreach(Control c in panel.Controls)
{
  if(c is SomeUserControlBase)
  {
      ((SomeUserControlBase)c).UpdateUI();
  }
}

hvis jeg selv skulle vælge - ville det nok blive noget med et interface i denne stil (navnene skal bare være beskrivende ... det er ikke anbefalinger) :

public interface IUpdateableUserControl
{
  event System.EventHandler UpdatedByUser;
  void RefreshUI();
}

det kunne så sikre dig muligheden for - på disse forskellige kontroller - at kunne fortælle at de skal opdateres + hooke op på et event der fortæller at der er foretaget ændringer af brugeren.¨

hvis der er tale om et helt generelt princip i din applikation - og du har mange forms der viser flere af den slags kontroller - kan du jo måske ligefrem lave en baseform der implementerer en collection af den slags interfaces.... Så vil du måske kunne ende op med noget i denne stil :

foreach(IUpdateableUserControl iuc in this.UpdateableUserControls)
{
  iuc.RefreshUI();
}

Det er også tænkeligt at du kunne have behov for at lægge nogle dependencies ind.... så du kun opdaterer dem der er afhængige af hvad der nu er blevet opdateret af en bruger.

... du har selvfølgelig også muligheden for at sørge for at dine kontroller binder til data fra en type som du kan snable ændringer på .... således at alle dine kontroller bare selv holder øje med om datakilden er opdateret - og opdaterer sig selv i forhold til det.

Nå.... det var lige et par løse bemærkninger.. du kan jo eventuelt smide et par ord omkring hvad du føler for ... så kan vi tage den derfra :o)

mvh
Avatar billede dch Nybegynder
12. februar 2005 - 17:35 #4
Har implementeret en løsning hvor Page gennemløber de relevante UserControls, og kalder deres update funktion når Pagens "UpdateControls" kaldes fra en kontrol.

Tak for snakken. det var rart lige at få dit syn på emnet. :)

Smid et svar så du kan score dine point. :)

MVH,
Daniel
Avatar billede snepnet Nybegynder
12. februar 2005 - 23:14 #5
Det var så lidt - du må endelig sige til hvis der er andet omkring det.
Mvh :o)
Avatar billede dch Nybegynder
14. februar 2005 - 09:41 #6
Jepper ;)

Hvad er dit grundlag for din programmerings-viden, hvis jeg kan tillade mig at spørge? :)
Avatar billede dch Nybegynder
14. februar 2005 - 09:45 #7
det er et ret advanceret web-baseret spil jeg har givet mig i kast med, så der opstår sikkert masser af saftige emner som jeg nok lige vender herinde inden implementering. :p
Avatar billede snepnet Nybegynder
20. februar 2005 - 00:25 #8
hej igen dch :o)

undskyld jeg først svarer nu - jeg har været på ferie hele sidste uge.

mit grundlag - det må du da gerne spørge om - jeg er e-ingeniør af uddannelse, med speciale i software - og så har jeg arbejdet en del med .net.

det lyder spændende dit projekt.... glæder mig til at se dine fremtidige spørgsmål :o) (prototype-links kunne jo også være lækre :oP)

mvh
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