webForumDet fria alternativet

ListBox och PostBack

10 svar · 439 visningar · startad av kristoffer

kristofferMedlem sedan juni 20001 266 inlägg
#1
NETworkMedlem sedan juni 20011 679 inlägg
#2

Kanske kan du lösa det om du med javascriptet samtidigt fyller en osynlig textbox med dina items i rätt ordning och sedan plockar dina data från denna när du binder om din listbox?

kristofferMedlem sedan juni 20001 266 inlägg
#3

Usch, det låter ugly. Men det måste ju vara nåt som är fel med det sätt som jag har försökt lösa problemet på?

NöffMedlem sedan nov. 2003569 inlägg
#4

För det första tror jag inte det är nån bra ide att använda java-script på dynamiskt skapade webcontrols, lös det istället med codebehind.
Och sen måste du alltid skapa om din listbox i Page_Load/Page_Init. Och för att trigga Viewstate på ListBox/DropDownListor ska du insert:era ListItem:s efter du lagt till din DropDownList/ListBox:en i Panel/Repeater. På så sätt triggas TrackViewstate.

kristofferMedlem sedan juni 20001 266 inlägg
#5

Tack för de svaren. Ska kolla.

GladhMedlem sedan maj 20013 024 inlägg
#6

ViewState skall ju återställa kontrollers properties, varför görs inte detta?

ViewStaten har inte som uppgift att återställa kontrollers postade-värden efter en postback, det är vanlig missuppfattning. Däremot så återskaps dina värden som finns i dropdownlistan, men endast om de är skapade i codebehind.

Paul Wilson har en bra article om ViewStaten här: http://authors.aspalliance.com/PaulWilson/Articles/?id=7

Dy kan även läsa på lite om Postback på: http://www.aspalliance.com/articleViewer.aspx?aId=134

- Magnus

NöffMedlem sedan nov. 2003569 inlägg
#7

Detta är ett av mysterierna med Viewstate på dynamiska kontroller, det magiska sker när man lägger till ListItems efter man lagt till DropDownListen på sidan, lägger man i ListItems före man lagt till DropDownListen på sidan triggas inte TrackViewState.

ViewStaten har inte som uppgift att återställa kontrollers postade-värden efter en postback, det är vanlig missuppfattning.

jo, om man lägger i items efter man skapat control:en då triggas TrackViewState :e

kristofferMedlem sedan juni 20001 266 inlägg
#8

Det fungerar bättre nu. Efter PostBack behålls ordningen för itemsen i ListBoxen. Däremot får inte Itemsen nya index, trots att de är sorterade enligt de nya indexen.

Om vi har listan:

a
b
c

a väljs och knapp NER klickas och då ser vi följande:

b
a
c

men indexen är fortfarande a=0, b=1, c=2, dvs nästa knappklick ändrar utifrån det ursprungliga

kristofferMedlem sedan juni 20001 266 inlägg
#9

Nu har jag till slut fått det att fungera. Jag skapar om ListBoxen i varje PostBack, men dess Items enbart i (!IsPostBack).

GladhMedlem sedan maj 20013 024 inlägg
#10

citat:
--------------------------------------------------------------------------------
ViewStaten har inte som uppgift att återställa kontrollers postade-värden efter en postback, det är vanlig missuppfattning.
--------------------------------------------------------------------------------

jo, om man lägger i items efter man skapat control:en då triggas TrackViewState

hehe :) Du läser inte tillräckligt noga...

Itemen sparas i viewstaten och flyttas över, men en kontrolls postback-värde sparsa inte i viewstaten. Alltså om du tar en textbox och fyller den med ett värde så sparas inte det värdet i ViewStaten. Precis som Wilson skriver i sin artikel, så kan man enkelt kolla det genom att sätta EnableViewState = false på textboxen och se att värdet är kvar efter en postback.

Däremot så hade items i en dropdownlista försvunnit om man tagit bort viewstaten. Och jag fick intrycket att han fyllde sin dropdownlista med javascript och dessa värden finns inte i viewstaten, men det var nog jag som missuppfattade kristofer :(

- M

NöffMedlem sedan nov. 2003569 inlägg
#11

Naj :), det är detta som så skumt med dropdownlistor, man kan återskapa egenskaperna, och hur man gör det är beroende på om man lägger in items före eller efter skapandet av kontrollen, helsnurrigt? ;) , javisst, tycker jag också, kolla denna artikel:

http://www.denisbauer.com/ASPNETControls/DynamicControlsPlaceholder.aspx

dock den handlar om en annan grej men han tar också upp trackviewstate, scrolla ner till "property restoration"

Genererad på 381 ms · cache AV · v20260730165559-full.f96bc7eb