16. august 2004 - 16:14Der er
39 kommentarer og 1 løsning
Hjælp til viewstate
Jeg har en side med en lang række asp:checkBoxList controls. Dvs. det er nogle der dynamisk bliver genereret i et datagrid. Worst case er 3000 checkboxlister. Problemet er at alle disse lister laver en gigantisk VIEWSTATE streng, som fylder over 2 MB. Dvs. det tager 100 år at loade siden. Jeg ved man kan skrive EnableViewState=False, men når jeg gør det ser det ikke ud til at have den store effekt. Gør jeg noget galt, eller virker EnableViewState ikke for asp:checkBoxList? Her er en lille kodestump:
Hej bumle :o) Har du prøvet at trace, og se hvad det reelt er der fylder i dit viewstate ? (men bortset fra det, så synes jeg da at jeg plejer at få rimelig gode resultater når jeg slår viewstate til og fra.... kan du ikke sende helt dit page directive ?) Mvh
joda....her er hele mit page directive: <%@ Page language="c#" Codebehind="mainform.aspx.cs" AutoEventWireup="false" Inherits="certregister.mainform" enableViewState="false" %>
Men bortset fra det vil jeg helst ikke have slået viewstate fra på hele siden da der er andre controls som jeg bruger til fx. søgning og sådan. Der vil jeg gerne have det. Der er præcist 2 selectboxes og 4 textfelter vidst. Det er kun på de irriterende checkboxlist-controls det skal være slået fra. Hmmm jeg kan bare ikke lige få den til det.
Hmmm det ser ud til mit datagrid laver en masse i tracen......selvom jeg har sat enableViewState=False på den..som vist ovenover. Det forstår jeg ikke helt...hvad kan være grunden til det? HEr er et lille udsnit: Det er vidst 1 række i datatabellen
Det andet tal viser hvor meget plads der optages i viewstate, så faktisk er der ikke nogle af de kontroller du har vist der bruger noget viewstate... har du nogle andre linier hvor der ser ud til at der bliver brugt viewstate ? mvh
hmmm okay...ja altså der er de få søge-controls oppe i toppen. De bruger lidt, men det er ikke så meget igen. Ihvertfald ikke noget i forhold til hvor stor viewstate-feltet er i html-outputtet. Det er helt gigantisk. Her er tracen for de andre server controls.
Når kontrollen renderes betyder det at det endelige html-output skrives til outputstream, og der er de klart at dit grid kommer til at fylde en del.... hvis du har 3000 rækker kommer der jo en hel del html ud. Jeg kan se at du har en del kontroller som vil give dig et tungt viewstate - særligt dine dropdownlister og calenderpopups ser det ud til.
Men altså så mange er der altså heller ikke.. 3 kalendere og 2 dropdowns. Det er da ikke unormalt mange....Hvis man ikke engang kan lægge det ind på en side uden der bliver lavet et gigantisk viewstate....så vil jeg sige at så skuffer asp.net mig da en smule....
Men okay så....Når jeg så slår viewstate fra på hele siden, kommer der ganske rigtigt heller ikke nogle brugte bytes i viewstates i trace nogle controllers. Dog kommer der dog i følgende øvertste linie følgende: __PAGE ASP.mainform_aspx 2365460 500276 Dette kunne jo måske godt være den der skaber hele den gigantisk lange streng i html-dokumentet? Hvad kan det så være?
Hmmm ja...Jeg skal bruge x-antal checkboxe nemlig. Nok højst 4, men i princippet kender jeg ikke grænsen. Det skal være dynamisk alt efter hvad der står i databasen...Desuden skal jeg kunne lave nogle af dem readonly....måske er det bedre at lave gode gammeldags <input type=checkbox>...og så bare x-antal af dem inde i en templatecolumn. Tror du måske ik det ville være smartere?
nej....hmm det er nok det smarteste...er det muligt at lægge dem ind på baggrund af en anden forspørgsel i DB? Altså selve datagriddet er jo en forspørgsel...så det blir jo en nested forspørgsel...Hvordan klares den?
jeg ville definere et dataset bestående af de to tabeller med relationer og hele balladen, så ville jeg skrive en stored procedure til at suge sagerne op med, og i min databinding af griddet sørge for at oprette checkboxene med værdierne fra den tabel det drejer sig om. (altså binde griddet til tabel1, og pr. relation trække de nødvendige værdier fra tabel2 i handleren af databindevented på griddet).
Er det så ikke lettere at kalde en funktion der ligger i code behind som retunerer x-antal checkboxes i en lang streng. Altså html kode som bliver printet på siden.
Undskyld den bratte afslutning, men jeg har lidt for mange løse ender...Blir nødt til at lukke for nogle af alle mine spg. Tak for hjællpen. Hvis der er lagt svar får disse point, eller er jeg nødt til at tage dem selv for at lukke alle de her spg. Mvh.
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.