Avatar billede jess_chr Nybegynder
03. juni 2005 - 19:14 Der er 12 kommentarer

aspx - genfrisk kun siden en gang

Jeg er igang med at lave en side i aspx, men da jeg ikke i forvejen kunne asp er det meste af koden genereret igennem code behind, som er skrevet i C# (der er ikke efter eget ønske at den skulle laves i aspx).

Næsten alle textboxe, dropdownlister osv er generet i koden, næsten efter php principper(bare ikke lige så nemt)... nok om det...

disse ligger i deres repektive klasser, og alle i den samme fil så den er blevet en smule lang...

problemet er at jeg ikke kan reefreshe siden fra andet end hovedklassen, og derfor skal man trykke 2 gange på knappen før den går ind på en ny side, koden bliver udført korrekt men siden anvender først de nye informationer efter andet klik...

FX...
1. jeg opretter en ny sats i loggen og trykker gem...

2. herefter vil jeg have systemet til at sender brugeren tilbage til forummet han her oprettet den nye sats i...

problemet: systemet viser stadig 'opret ny sats' indtil der bliver trykket på opdater eller der er blevet trykket på knappen 'gem' igen...

det skal siges at selvom jeg trykker på 'gem' igen, blever satsen ikke oprettet igen, den går til den side det var meningen den skulle gå til ved første klik.

det jeg leder efter er en form for 'refreshonce' funktion eller lign.

PS: "Response.Redirect();" virker ikke!

På forhånd tak...
Avatar billede burningice Nybegynder
03. juni 2005 - 19:31 #1
hvad får dig til at sige at Response.Redirect ikke virker? Har du prøvet den? Hvad sker der når du bruger den?
Avatar billede jess_chr Nybegynder
06. juni 2005 - 08:19 #2
Response.Redirect(); virker, men lidt for godt... den bliver ved med at opfriske siden i en uendelig løkke... den første redirect invoker den anden redirekt osv...

jeg lavede en boolean som tjekker om det er første gang siden refreshes, noget lign sådan her...

public static bool first = true;

if(first == true){
Response.Redirect("minside.aspx");
first = false;
}

men værdien "first" bliver ved med at være "true" ligegyldigt hvad jeg siger, kunne forestille mig at den ikke opdatere værdien, grundet måden aspx bliver afviklet...
Avatar billede jess_chr Nybegynder
06. juni 2005 - 14:54 #3
jeg fik det til at virke med "Server.Transfer();"... direkte fra den nye klasse, men nu brokker den sig derimod sig over at den ikke kan anvende et objekt, når jeg trykker på en anden knap med samme funktion igen...
Avatar billede burningice Nybegynder
23. juni 2005 - 09:25 #4
ja, du skal sæstte first til false før du redirecter, da koden efter din redirect som standard ikke vil blive udført.
Avatar billede hvideg Nybegynder
27. juni 2005 - 00:34 #5
hæ hæ hæ

jo den hoppede jeg også på når du redirecter hedder det:

response.redirect "myurl.aspx", false

redirect har fået en parameter mere, som er om den skal abandon session, så vidt jeg husker, den defaulter altså til true. Så hvis du ikke skriver false så fungerer det ikke som normalt, eller før .net
Avatar billede burningice Nybegynder
27. juni 2005 - 00:42 #6
hvideg>> det er ikke noget med at abandon session. False som parameter betyder at ens request ikke skal afbrydes, men køre videre til det normalt vil afslutte. Det betyder i praksis at kode efter ens Response.Redirect() vil blive udført.

Dog vil jeg mene at det ikke er pæn kodestil at forvente kode efter Response.Redirect bliver udført, da metoden i de fleste programmørers opfattelse kan ses som et hard break, altså sammenlignes med en return i en funktion, hvor at kode efter return heller ikke vil blive udført.

Og lige til sidst, så er response.redirect "myurl.aspx", false ikke pænt at skrive, det hedder Response.Redirect("myurl.aspx", false)
Avatar billede hvideg Nybegynder
27. juni 2005 - 00:43 #7
husk at din kode on load som kun skal køres en gang skal bag ved en

VB.Net
if not ispostback then
  indlæs form
else
  behandl form submission.
end if
eller i C#.Net
if(!ispostback == True){indlæs form;}else{behandl form}

Alle kontroller på en asp.net webform har en autopostback property, som sandsynligvis vil kunne hjælpe med at man ikke behøver at trykke på en ekstra knap også.
Avatar billede burningice Nybegynder
27. juni 2005 - 01:59 #8
du skal altså huske din case !

if (!IsPostBack == true) { indlæs form; } else { behandl form; }

Og nej, det er ikke alle kontroller der har en AutoPostBack. Det er typisk kun kontroller man kan vælge noget i, f.eks. CheckBox, DropDownList, ListBox, DateTimePicker, TextBox.
Avatar billede hvideg Nybegynder
27. juni 2005 - 13:11 #9
det var bare ment som en skitse

burningince>> ok, ja. men det virker ikke fornuftigt hvis du har  ", true" (altså default) for idet requestet så :) afsluttes så fastholdes state på en eller anden måde i praksis ikke ordentligt, så man ricikerer session was being abandoned error hvis man ikke husker false. False derimod giver samme adfærd som en sandsynligvis asp programmør ville forvente, ved at være vant til at skrive response.redirect "somewhere.aspx"

Jeg skriver selv i VB.Net, så kasus og paranteser ordner din interface parser da for dig hæ hæ. Men du har da ret en køn om ikke nødvendigvis mest overskuelige måde at skrive det på i Vb.net er

if ispostback = true then : do something : else : do something other : end if

lol og når man trykker enter for enden so retter din venlige parser liniens kasus ind efter definitionen, her Page.IsPostBack

Jeg tror at spørgsmålet drejer sig om redirect issue, mere end om den knap som man trykker på (og skal trykke på igen) er en System.Web.UI.WebControls.Button eller noget tredie, der er en hændelse. Så ved en korrekt redirect altså antageligt så
Response.Redirect("myURI.aspx?a=whatever", false); i det kantede c# mon ikke det er det som skal til for at undgå symptomet i ovenstående scenario?
Avatar billede hvideg Nybegynder
27. juni 2005 - 13:28 #10
Kiggede lige igen.
Server.Transfer viderefører stripper så vidt jeg husker for form submissions blandt andet, du skal bruge redirect
overvej at sætte en session variabel i stedet hvis du har session state.
Shared typen af variabel kan også hjælpe med til at holde visse informationer tilgængelige for alle instanser, de kan også defineres i global.asax's code behind, men jeg tvivler på at det vil være en issue, hvis du ændrer den anden parameter i redirecten. Ellers sig til, det skulle jo være, kan man måske lidt humoristisk udtrykke det; "en form sag" *g*
Avatar billede hvideg Nybegynder
27. juni 2005 - 13:36 #11
Lige for at runde af hvad jeg mente. Så altså hvis du i en instans af en page redirecter til pagen igen, så bliver det en ny instans som kører når redirecten er gennemført, så dens lokale variabel vil igen have first=true => den den af problematikken kan løses ved at flytte variablens definition til session eller global.
Avatar billede burningice Nybegynder
27. juni 2005 - 17:05 #12
det er ikke godt at blive for doven... det betyder bare at når du en dag får stukket notepad i hånden, så sidder man bare og sige øh bøh og får skrevet noget plidder pladder.

Og hvis du en dag skal skrive i et casesensetive sprog, så får du altså compilerfejl hvis du f.eks. skriver ispostback, så man kan lige så godt lære at gøre det ordenligt.
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
Kurser inden for grundlæggende programmering

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