好的我在这里有点难过。我在页面上有一个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");
}
任何人都可以提供一些关于发生了什么的见解???
答案 0 :(得分:2)
服务器端,您的下拉列表中没有任何项目。它无法触发OnSelectedIndexChanged事件,因为它的索引没有改变 - 它没有任何项目可以为它提供有意义的当前索引值。
答案 1 :(得分:2)
我认为这个问题与以下事实有关:当页面加载时,下拉列表中没有元素,ViewState没有任何选定项目的信息;因此,当它回发时,它确定没有任何IndexChanged事件要触发。
它回发的事实只是因为Autoposback属性设置为true,它基本上触发了正常的表单提交。
如果您希望这样做,请将AutoPostback属性更改为false并将代码挂钩到onchange事件,然后将另一个Ajax请求发送到您需要在服务器端执行的任何方法,并在客户端绑定数据。