ASP.NET viewstate

Tags:    asp.net

<< < 123 > >>
Hey Udviklere.

Har en simple ASP.NET side, hvor der bliver lavet et postback til serveren når en knap bliver trykket.

Mit spørgsmål omkring dette er. Jeg har 8 tekstbokse som har værdier jeg gerne ville gemme inden postback'et sker, og derefter "loade" disse værdier tilbage efter mit postback.

Jeg har prøvet at gemme disse værdier i viewstates, men kan ikke rigtig finde ud af at få dem loadet ind igen, når siden bygges på ny efter sit postback.

Håber nogle kan pege mig i den rigtige retning.

Tak på forhånd.



22 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Har du tjekket om TextBox_id.Text indeholder den forventede værdi lige efter at linjen hvor du assigner en værdi til den er kørt? Har du tjekket om du måske overskriver værdierne et andet sted i din kode?

Mvh.

Kasper (TSW)



Du har ikke i din Page_load noget kode der sætter tekstboksene til ingenting? Eller i din markup sat text="" vel?

Et andet lille fif:
Fold kodeboks ind/udCSharp kode 

ville jeg udskifte med:
Fold kodeboks ind/udCSharp kode 

Således gør du din liste typestærk og vil give dig kompileringsfejl så snart du kommer noget i den som ikke er af typen string, hvorimod Arraylist tager objekter så det kan være ALT så der skal du selv vide hvad du laver. Derudover skiftede jeg din string konvertering til at bruge den indbyggede metode alle objekter har som er ".toString()" fordi det er god vane at bruge denne fremfor den løsning du bruger.
Hvis du objekt du bruger ".toString()" på har overridet samme metode kan du selv skrive noget tilbage som er brugbart.

Eksempel:
Du laver et human-objekt
med cprnummer, navn, alder, køn, højde, vægt, hårfarve, øjenfarve, etc.
og du smider dette objekt ind i en listbox vil ".toString()" blive kaldt for at vise en værdi i listboxen.
Hvis du selv overrider denne metode kan du sørge for der udskrives "[cprnummer] Køn-Navn alder".



For mig ser det ud som om du forsøger at gøre følgende:

1) Hente data fra DB
2) Oprette tabeller til præsentation af disse data
3) Lave mulighed for at rette dine data

Er det korrekt?

For så lyder det som om du ikke har tænkt på at hver gang du kører page-load så henter du data igen fra databasen og opretter alt din præsentation igen med det fra DB'en (ingenting).

Hvis det var mig, ville jeg i min oprettelse af kontrollen teste om den allerede findes og om der er en værdi i den.

Og eventuelt start med en enkel tabel med en dynamisk tekstboks.
Når du først har fået lavet en som du kan få til at oprettes dynamisk, og indlæse data i så kan du udvide med flere.

Og eventuelt se om de kontroller du add'er har viewstate enabled på sig når du adder dem til siden, for ellers vil du i din postback ikke kunne se værdien der står i dem.



Hej Cristian,

Med mindre du har ændret et eller andet, enten på selve siden eller i din web.config, eller du af en eller anden grund bruger HTML textboxes i stedet for ASP.NET textboxes, så burde det ske helt automatisk - det er jo netop formålet med ASP.NET's viewstate funktionalitet :)

Mvh.

Kasper (TSW)



Uhmmmm jeg bruger ASP.NET tekstbokse.

Men jeg har en knap som starter en process der henter data fra en MSSQL database.

Her hiver jeg en bestemt række ud, og f.eks. Tager data'en fra den første kolonne og ligger ind i en tekstboks.

textbox_Text = data.

men under mit postback (som sker fordi man trykker på en knap, af det jeg forstår)
mister min textbox_Text den værdi som jeg netop har lagt ind i den. Men den data ville jeg gerne bevare.



Medmindre du uden at vide det fx har disabled viewstate eller kommer til at databinde med tomme værdier ved postback så burde det du beskriver fungere som forventet - så jeg tror du bliver nødt til at komme med din kode.



Okay, det lyder som om du gør et eller andet forkert, men det er lidt svært at gennemskue hvad det er ud fra din beskrivelse. Det kan også være du bare gør et eller andet som jeg ikke lige forstår :)

Anyway, at gemme ting i Viewstate'n er ret simpelt:

Fold kodeboks ind/udCSharp kode 




Mvh.

Kasper (TSW)



ViewState skal gerne fra start af være enabled i din session med mindre du specifikt udtrykker andet da dette er en del af det smarte som ASP.NET gør for dig out-of-the-box.

I toppen af din side skulle du meget gerne have enabled din viewstate således:
Fold kodeboks ind/udCSharp kode 


Derudover skulle du også gerne bruge asp.net textbokse for at sikre denne funktionalitet virker. Hvis du ligger mærke til pre-fix'et "asp:", kan du se dette er noget asp.net specifik funktionalitet der er bygget ovenpå.
Så dine textbokse skulle gerne se således ud:
Fold kodeboks ind/udCSharp kode 

Hvis du sætter text-propertien inden i din markup i ovenstående (til "") kan dette gøre alt efter rækkefølgen af hvornår du gør ting, at dine værdier overskrives med ingenting.



Det jeg prøver er

Fold kodeboks ind/udCSharp kode 


Det meget muligt jeg har misforstået noget og det derfor ikke virker. Jeg får fint værdien over i viewstaten, men kan ikke se hvordan jeg skal få den tilbage så den bliver vist i TextBox_id.Text feltet f.eks.



Indlæg senest redigeret d. 23.07.2012 12:43 af Bruger #16700
Du roder lidt rundt i det, tror jeg. Fx har du et tjek på Page.IsPostBack, men den vil altid være sand i en click eventhandler. Derudover gemmer du noget i ViewState som du så i samme metode forsøger at bruge igen - hvorfor ikke bare putte det direkte over i dit tekst felt?

Mvh.

Kasper (TSW)



<< < 123 > >>
t