Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ASP.NET/VB.NET: Dropdownlist SelectedIndexChanged not firing with onchange="javascript:return true;"

I have the following markup:

<asp:DropDownList ID="dd1" AutoPostBack="true" runat="server">
    <asp:ListItem Value="1">1</asp:ListItem>
    <asp:ListItem Value="2">2</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="dd2" AutoPostBack="true" onchange="javascript:return true;" runat="server">
    <asp:ListItem Value="1">3</asp:ListItem>
    <asp:ListItem Value="2">4</asp:ListItem>
</asp:DropDownList>

Wired up to this:

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

When dd2's index is changed, you'd expect its handler to fire, right? Well, it doesn't. Instead, it gets "queued up" and is fired after dd1's handler fires when its index is changed. If you take the onchange="javascript:return true;" off dd2, it fires just fine.

Does anyone have any idea what's happening here?

Edit: My first answer would be that using return expressions on a dropdownlist doesn't work the same as a button's click event, but I swear I've done this with dropdownlists before.

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

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

I don't see why I have to do this, but it works. However, I still want to do it the other way, so if someone knows, please let me know so I can mark you as answer.

like image 836
oscilatingcretin Avatar asked Dec 16 '22 08:12

oscilatingcretin


1 Answers

You shouldn't need that at all. Just set AutoPostBack to true, and if you need to escape validation set CausesValidation to false.

<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" CausesValidation="false" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" />
like image 123
James Johnson Avatar answered Jan 17 '23 18:01

James Johnson