webForumDet fria alternativet

Viewstate - GET eller POST - hur gör ni?

.NET

4 svar · 355 visningar · startad av anbj

Medlem sedan juli 2000231 inlägg
Frågan#1

Hallå!
Jag har en vanlig enkel repater som listar data från en Stored Procedure. I repeatern har jag via headern möjlighet att sortera på de olika kolumnerna i repeatern. Jag har också ett antal knappar för varje rad, t ex edit, delete osv. När man klickar på vissa av knapparna får man en pop-up ruta där man gör vissa saker och när man submittar i pop-up rutan stängs det fönstret och huvudsidan laddas om för att visa ändringen.

Så långt inga problem, ett ganska vanligt upplägg kan jag tänka mig. Men nu till problemet, för att man ska kunna sortera på de olika kolumnerna använder jag linkbuttons, vilket kräver att ViewState är påslaget för repeatern (vet ej varför), viewstate kan i och med det bli ganska stor.

Tänk er sedan scenariot där någon har klickat på att han vill sortera på kolumn x (en postback med method=post sker), efter det klickar han upp ett pop-up fönster och klickar på submit i det fönstret. När huvudsidan då ska laddas om får jag en härlig, "the page cannot pe refreshed without resending the information blabla..." vilket man ju får när man försöker reloada något som är "postat".

Hur undviker jag detta? Om jag skulle sätta formulärets action till GET så skulle ju allt vara frid och fröjd, om det inte hade varit för viewstate... viewsate kommer garanterat bli större en de antal tecken man kan skicka via GET, och jag måste ha viewstate enabled för att sorteringen ska funka.... hur löser man detta??

Medlem sedan maj 20012 812 inlägg
#2

ViewStaten måste vara påslagen så att man kan hitta dina LinkButtons vid en Postback. Det finns vägar runt det, men det smidigaste är att den är på.

Du behöver dock inte ha viewstaten påslagen för hela din repeater, beroende på hur du gör i din postback. Om du har 5 Labels och 1 Linkbutton, så kan du explicit stänga av PostBacken för dina Labels och bara ha det för din LinkButton. Det kräver dock att du hämtar upp all data igen, eftersom din repeater efter en postback inte har sparat vilken data som fanns för Labelsen.

- Magnus

Medlem sedan juli 2000231 inlägg
#3

Jag testade att göra som du sa, jag har disablat viewstate på allt förutom själva repeatern, men jag får ändå en toklång viewstate (som ju lär bli längre ju fler saker som finns i repeatern).

Det hade ju varit trevligt om man kunde disabla viewstate på hela repetaern förutom själva headern, det hade väl löst problemet gissar jag...

Några andra bra tips på hur man kan lösa det hela?

Medlem sedan maj 20012 812 inlägg
#4

Lägg headern utanför repeatern så fall. Har jag gjort ibland när jag vill ha en liten ruta där min data skall scrolla i.

- Magnus

Medlem sedan juli 2000231 inlägg
#5

Det är ju också en variant, man kanske kan lägga den i en panel eller liknande så att man kan sätta visible = false om man inte har något i repeatern

Ett annat tips jag fick var att helt enkelt inte ladda om sidan utan att alltid gå till sidan explicit.

Jag får testa mig fram till vad som passar bäst.

Tack för tipsen!

271 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)