ASP.NET/VB.NET: Dropdownlist SelectedIndexChanged niet aan het vuren met onchange = "javascript: return true;"

Ik heb de volgende markup:


    1
    2


    3
    4

Vast hieraan:

Protected Sub changed1(sender As Object, e As EventArgs) Handles dd1.SelectedIndexChanged

End Sub

Protected Sub changed2(sender As Object, e As EventArgs) Handles dd2.SelectedIndexChanged

End Sub

Wanneer de index van dd2 is gewijzigd, zou je verwachten dat de handler gaat vuren, toch? Nou, dat doet het niet. In plaats daarvan wordt het "in de wachtrij geplaatst" en wordt het geactiveerd nadat de handler van dd1 heeft geflitst wanneer de index is gewijzigd. Als u de onchange = "javascript: return true;" off dd2 neemt, brandt het prima.

Heeft iemand enig idee wat hier gebeurt?

Bewerken: Mijn eerste antwoord zou zijn dat het gebruik van retouruitdrukkingen in een vervolgkeuzelijst niet hetzelfde werkt als de klikgebeurtenis van een knop, maar ik zweer dat ik dit eerder met dropdownlists heb gedaan.

Update: I am able to force the server event to fire by doing this in Javascript:

__doPostBack("<%=dd2.ClientID %>", '');

Ik begrijp niet waarom ik dit moet doen, maar het werkt. Ik wil het echter nog steeds op de andere manier doen, dus als iemand het weet, laat het me dan weten zodat ik u als antwoord kan markeren.

3

5 antwoord

Dat zou je helemaal niet nodig moeten hebben. Stel gewoon AutoPostBack in op true, en als u moet ontsnappen aan validatieset CausesValidation naar false.


4
toegevoegd
Ik gebruik validatie?
toegevoegd de auteur oscilatingcretin, de bron
Mijn voorbeeld laat zien dat ik al AutoPostBack = "true" heb. Ik doe helemaal niets met validatie. Ik wil gewoon niet dat de gebeurtenis aan de server helemaal vuurt, afhankelijk van of ik wel of niet waar of onwaar retourneer.
toegevoegd de auteur oscilatingcretin, de bron
AutoPostBack = "true" heeft me geholpen het probleem aan mijn einde op te lossen.
toegevoegd de auteur AceMark, de bron
Vraag je me of je een validatie gebruikt? Als er validators op de pagina staan, maar u niet wilt dat de DropDownList de validatie activeert, stelt u OorzakenValidatie in op false. Anders stelt u AutoPostBack in op true, en alles is goed.
toegevoegd de auteur James Johnson, de bron
Misschien ben ik in de war ... wat probeer je te doen en wat is het probleem?
toegevoegd de auteur James Johnson, de bron

Om de een of andere reden dacht ik dat je de servergebeurtenis van een vervolgkeuzelijst kon annuleren door false te retourneren aan de onchange-gebeurtenis van de clientkant zoals je dat kon met de onclick-gebeurtenis van een knop (bijv. onclick = "javascript: return false;" ) .

Wat ik uiteindelijk deed, is het controleren van een voorwaarde in een functie. Als dit waar is, wordt dit geactiveerd:

__doPostBack("<%=dd2.ClientID %>", '');

Anders doet het dat niet.

2
toegevoegd

                            

Add Autopostback = "true heeft de truc voor mij gedaan.

1
toegevoegd

__doPostBack("<%=dd2.ClientID %>", '');

dit werkte voor mij ...

dit was mijn drop-down .........

hier is mijn jQuery-functie

function CheckDate() {

    var date = document.getElementById('<%= ucDateTimeStart.FindControl("txtDateTime").ClientID %>').value;
    if (date == '') {
        alert("Please select a valid date.");
        return false;

    }
    else {
        __doPostBack("<%=ddlbranchname.ClientID %>", '');
        return true;
    }


    return true;

}
0
toegevoegd
this is my drop down..
 
                
0
toegevoegd