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.
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...
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...
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
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)
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å.
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.
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?
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*
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.
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.
Synes godt om
Ny brugerNybegynder
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.