07. februar 2005 - 14:49Der er
4 kommentarer og 1 løsning
Forvirrelse omkring brug af ViewState
Jeg har et typisk scenarie der gentager sig.
Jeg har en ArrayList med objekter. Dette ArrayList sætter jeg som DataSource på en DataList og alt er som det skal være.
Når jeg fanger en event på min DataList, f.eks. ItemCommand, vil jeg gerne have fat i det objekt som der blev klikket på. Jeg vil altså ikke have selve DataList-item'en, men jeg vil have det oprindelige objekt som min DataList-item er baseret på.
Jeg forsøger at læse DataItem på men DataList-item - det burde give det rigtige resultat - men den er tilsyneladende altid 'null', med mindre jeg gen-initialiserer min datalist ved hvert postback.
Det kan da ikke passe jeg skal initialisere min DataList ved hvert PostBack, vel? Jeg vil undgå at lægge min oprindelige ArrayList i Session, og jeg synes heller ikke det virker som en god løsning at lægge den i en særskilt ViewState.
Hvad er den "rigtige" måde at løse dette scenarie på?
jeg ved ikke om man kan sige at der er en rigtig løsning på det .... det er lidt afhængig af hvad det er du ønsker at gøre med dit dataitem.
som du selv er inde på, skal du hente data og databinde hver gang, hvis dit dataitem skal være til rådighed i en handler af ItemCommand ell.
viewstate synes jeg ikke du skal bruge .... for det første vil du få den øgede overførselstid, og for det andet skal serveren bruge en hel del ressourcer på at proccesere dit viewstate - performancemæssigt er der ubetinget den mindst attraktive løsning.
hvis du lægger din arraylist i session kan du altid få fat i de data der vedrører den enkelte række ved et simpelt opslag... nu ved jeg ikke hvad det er for objekter du lægger i din arraylist - men hvis det er noget du oprindeligt har hevet op af en database eller lign. har du jo også muligheden for at oprette dig en enkelt forekomst (af det du nu måtte have i listen) pr. et eller andet id (du så gerne skulle have til rådighed på dit repeateritem).
er der nogen særlig grund til at du ikke vil lægge det i session ?
hvis du gider skrive et par ekstra ord om hvad det er du gerne vil gøre med dit dataitem efterfølgende - og om det kan være tilfældet at der skal ske en "revers databinding" for mere end den række du har fået eventet fra - ville det være fedt.
valget mellem det ene og det andet vil jo typisk være udfra en vurdering af "prisen" for at gemme det i session - kontra "prisen" for at initialisere det hver gang. jeg tror det er sjældent at det kan betale sig at initalisere hver gang (hvis du altså initialiserer med data fra en database eller lignenden eksterne ressource... ramklodser koster jo ikke noget - så lidt brug af session synes jeg da er acceptabelt.
Mange tak snepnet, det giver fint overblik - jeg troede der var en elegant måde at gøre det på. I mit tilfælde, er det et ret dyrt kald, at populere datalisten, så det ender såmænd nok med jeg lægger det i session.
jamen du får et svar så :o) held og lykke med det. 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.