24. maj 2005 - 20:40Der er
17 kommentarer og 1 løsning
To simple problemer ved submit af form.
Jeg har to problemer.
1. Når jeg udfylder en form og submitter, den står indholdet stadigvæk i felterne. Jeg har forsøgt at sætte viewstate på feltet til false, men det virkede ikke. Hvordan fjerne jeg indholdet af felterne, efter formen er submittet?
2. Formen submittes korrekt, men når jeg refresher siden bliver indholdet submittet igen og data bliver gemt i databasen igen. Hvordan fikser jeg det, så data kun kan submittes en gang, og ikke gentage inserts af samme indtastede data igen og igen...
#2: Det er en normal feature, da handlingen gentages. Løsning: send brugeren til en anden (eller samme side).. f.eks. response.redirect "side.asp". Dette kan også gøres på klientsiden, men det kan manipuleres af brugeren.
Det er det ikke.... en form i .NET er en serverkontrol <form runat="server"....>, hvor man slet behøver at skrive method="post" eller "get"....
Min serverkontrol er derfor en serverside stump kode, der overhovedet ikke har noget som helst med forskellige browsers at gør.
Jeg har kodet alm. vbscript i over 4 år, og er fuld gang med at omskole mig til .NETs måde at lave præsentationslaget på, hvilket er det der driller, og det jeg spørger efter en mere rigtig måde, at gøre det på.
Jeg har faktisk fundet en løsning på mit problem #2. Jeg skriver det ind, når jeg har fået testet det.
alle response objekter er kun med i .NET for at kunne hjælpe de 'gamle' asp udviklere, og for stadigvæk at give supportere asp i .Net. Det betyder derfor ikke at man skal gøre brug af de gamle og primitive asp teknikker på at løse et kendt problem....her må vi stole på microsofts .Net, og bevæge os i retningen af .Net.
Jeg tror mit problem #1 er blevet misforstået. Jeg er klar over at IE kan finde på at huske indtastede værdier, hvilket naturligvis er en browser "feature", men spørgsmålet gik mere ud på, hvordan man kunne vaske felter rene, efter submit af form, hvilket faktisk er løst. :o)
prøv at kig på den renderede html... din form får en method="post" hægtet på sig. Der er altså ikke noget sort magi ved .Net og serverkontroller. De forskellige problemer med http og html er de samme som de altid har været.
En mulig løsning, hvis du ikke vil bruge Response.Redirect, er at gemme et lille flag i viewstate. Det forhindrer ikke gen-post, men du har mulighed for at tjekke på serveren, om data'erne er gemt i databasen.
Og det er da noget vrøvl at sige at HttpResponse-klassen kun er med for bagudkompabilitet. Hvordan i alverden vil du gemme cookies til clienten? Eller indstille hvordan clienten skal cache. Eller sætte ContentEncoding for siden? Eller få fat i den stream der skrives til klienten?
Jeg bruger også selv response objektet til cookies, men jeg holder mig væk fra fx. redirect. Det var mere den, jeg kommenterede...(har også selv hørt en microsoft mand sige det).
Min fejl er at jeg har al min kode stående i min page_load, istedet for at smide min kode nede i fx min submit event. Der er masser af løsninger...og masser af diskussioner.
Jeg er træt af overcocky personer, der ser dette forum, som et sted, hvor man kan tale upænt, nedgøre og battle. Indtast deling af viden ind, kommenter ikke kommenstare. Man kan jo se at det har en negativ effekt herinde, da jeg / folk netop selv går ned på det niveau, ligsom jeg gør selv gør lige nu.
Jeg lukker og slukker her....da jeg selv har fundet løsningen på mit problem.
Paster den naturligvis ind her, så andre kan have nytte af det.
Jeg undskylder mine sure miner.....jeg trækker mine sureopstød tilbage....folk er flinke herinde....og hjælper folk i nød.....det må jeg huske.....og det skal man huske fremover....
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.