即使使用autopostback = true,OnSelectedIndexChange也不会触发

时间:2012-11-09 21:51:49

标签: c# jquery asp.net postback

好的我在这里有点难过。我在页面上有一个asp:Dropdownlist。它通过这样的Web服务调用填充:

Ajax.GetSubDevelopments(developmentId, function (results) {
    var subDevelopments = $j("#<%=ddlMinorAssociation.ClientID %>");
    subDevelopments.empty();
    $j('<option />', { value: "-1", text: "Select a sub association" }).appendTo(subDevelopments);
        $j.each(results, function (index, value) {
            $j('<option />', { value: value.SubDevelopmentID, text: value.Name }).appendTo(subDevelopments);
        });
        subDevelopments.show();
    });

实际控件本身如下:

<asp:DropDownList ID="ddlMinorAssociation" 
   OnSelectedIndexChanged="ddlMinorAssociation_SelectedIndexChanged" 
   AutoPostBack="true" runat="server" CssClass="hidden">
</asp:DropDownList>

目的是当用户选择子开发时,它将回发然后绑定结果的数据列表。现在该页面正在回发,Page.Request.Params.Get(“__ EVENTTARGET”)甚至表示由于下拉列表而回发。但是,我的ddlMinorAssociation_SelectedIndexChanged函数中的代码都没有运行。这是代码:

protected void ddlMinorAssociation_SelectedIndexChanged(object sender, EventArgs e)
{
    Response.Write("hi");
}

任何人都可以提供一些关于发生了什么的见解???

2 个答案:

答案 0 :(得分:2)

服务器端,您的下拉列表中没有任何项目。它无法触发OnSelectedIndexChanged事件,因为它的索引没有改变 - 它没有任何项目可以为它提供有意义的当前索引值。

答案 1 :(得分:2)

我认为这个问题与以下事实有关:当页面加载时,下拉列表中没有元素,ViewState没有任何选定项目的信息;因此,当它回发时,它确定没有任何IndexChanged事件要触发。

它回发的事实只是因为Autoposback属性设置为true,它基本上触发了正常的表单提交。

如果您希望这样做,请将AutoPostback属性更改为false并将代码挂钩到onchange事件,然后将另一个Ajax请求发送到您需要在服务器端执行的任何方法,并在客户端绑定数据。