2

好的,我在这里有点难过。我在页面上有一个 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");
}

谁能提供一些关于发生了什么的见解???

4

2 回答 2

2

服务器端,您的下拉列表没有任何项目。它不能触发 OnSelectedIndexChanged 事件,因为它的索引没有改变 - 它没有任何项目可以给它一个有意义的当前索引值。

于 2012-11-09T22:07:10.223 回答
2

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

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

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

于 2012-11-09T22:10:16.413 回答