Tjena! Jag har ett antal dropdownlistor som gör postbacks automatiskt. Problemet är att om man väljer ett alternativ i en av dropdownlistorna och sedan väljer ytterligare ett alternativ i en annan dropdownlist _innan_ den första dropdownlisten hunnit ladda om sidan så kraschar allt.
När jag gjorde en liten test för att förstå varför så finner jag att den kör funktionerna kopplade till de båda respektive dropdownlistorna samtidigt under samma postbacks. Jag vill bara köra funktionen kopplad till den senast valda dropdownlisten! Har ni någon idé hur jag kan lösa detta?
Jag skrev nog en rätt kass rubrik, den gör nog inte postback två gånger utan jag vill att den ska göra det, typ. :) Alltså, det är onSelectedIndexChanged jag har kopplat via två olika dropdownlistor, problemet är att båda funktionerna körs om jag väljer något i den första dropdownlisten och sedan även väljer något i den andra innan den första hunnit ladda om sidan... jag tycker att det borde vara endast den sista funktionen som körs!
Så här testade jag och då körs BÅDA funktionerna om man väljer något i båda dropdownlistorna (forloopen är endast för att fördröja funktionen så man ska hinna välja i den andra innan sidan laddas om):
Onekligen krångligt att få till en hyfsat snygg lösning för det hela.
Du kan ju alltid leka med visible-egenskapen. I början av respektive procedur kan du sätta andra procedurens visible-egenskap till false.
DropDownlist2.visible = false;
I och för sig körs ju båda procedurerna (antar jag, har inte testat ifall om kod relaterad till en kontroll som är osynlig körs, men antar det), men bara info från en procedur visas på sidan.
Vill du slippa visningen från två procedurer, eller slippa två exekveringar? Är det en designfråga eller prestandafråga, helt enkelt? ;)
Det går inte att använda på det sättet eftersom alla måste vara enablade samtidigt då det inte finns en given ordning som dessa väljs. Jag försöker laborera med javascripts nu men jag får inte till det heller. Jäkla komplicerat det blev för en sån enkel sak.
Alltså, det hela fungerar så att jag har ett antal grupper och undergrupper (i en oändlig lång hierarki) där man med en dropdownlister väljer befintliga grupper och då laddas undergrupper till den valda gruppen in i en ny dropdownlist osv. Jag vill också ha möjligheten att backa ett eller flera steg i hierarkin, alltså om jag valt undergrupper i 4 steg och sedan väljer om en grupp på nivå två så ska nya grupper in i dropdownlisten på nivå tre laddas in samtidigt som dropdownlisten med grupper i nivå fyra töms och disablas.
Allt fungerar! Problemet uppstår när man väljer något i en av dropdownlistorna och sedan väljer något i en annan dropdownlista utan att vänta på att den gjort sin postback färdig. Då balalr allt. Inte bara på sidan utan hela användarsessionen rasar ihop och man måste stänga webblösaren och logga in på nytt för att det ska fungera igen. Jag gör absolut inga konstigheter i funktionerna så detta är lite smått irriterande!!!
Hm.. Det här med att dropdownlistor raserar sessioner har jag också varit med om, och inte har jag löst det problemet heller. :l Helskumt!! Dock måste jag inte stänga webbläsaren, utan bara logga in igen. Logga in - utkastad. Logga in - utkastad.. :x
Nu har jag äntligen hittat en lösning och det var nog tur det för jag hade snart inte mycket hår kvar att slita av. Det blev en javascriptlösning. Jag fick ta bort autopostback på dropdownlisten, gjorde lika många osynluiga buttons som dropdownlistor och så gjorde jag en egen onchange på dropdownlisten som anropar ett javascript. I javascriptet sätter jag inProgress (bool) till false och sedan har jag en ifsats som kollar om inProgress är false, om den är det så går jag vidare, sätter till inProgress till true och startar en funktion via den osynliga knappen. Skulle jag välja något annat nu i en dropdownlist så kommer inprogress vara true och då går den aldrig vidare in i funktionen!
//För varje ddl har jag en asp:button:
<asp:dropdownlist onchange='InProgressCheck(this)' thisID="1" id="ddl1" runat="server"></asp:dropdownlist>
<asp:Button CausesValidation="False" style="visibility:hidden" id="b1" onclick="b1_Click" runat="server"></asp:Button>
//javascriptet
inProgress = false;
function NoDoubleCheck(ID){
if(!inProgress){
inProgress = true;
if(ID.thisID == 1)
document.getElementById("_ctl0:Button1").click();
}
}
Grundproblemet, varför hela sidan ballar ur när någon väljer ett item i en dropdownlist två eller fler gånger på rad innan sidan hunnit laddas om vet jag fortfarande inte vad det beror på, men detta förhindrar i alla fall att den postar tillbaka till servern innan sidan hunnit laddas om. :bire
Jo, det var en snygg lösning! :) Men en anledning till att jag behövde mina buttons är också att det inte verkar gå att sätta CauseValidiation=false på en dropdownlist och jag vill helst ha det...
Nej, det gjorde den ju inte, anledningen till att den gjorde det förut var ju att jag hade kopplat postbacken till en button. Så du har alldeles rätt! Det har varit en mycket förvirrande förmiddag detta... :) Tack för hjälpen!
Testade lite med din kod Dino, men får det inte att fungera. AutoPostBack="true" använder sig av onchange och skriver över funktionsanropet till disableMyFellows. Har du fått det att fungera? Inte för att det är så viktigt, men om din kod går igång så är den ju snyggare än min. :)