Jquery 当在客户端填充DropDownList时,如何获取SelectedIndexChanged事件;

Jquery 当在客户端填充DropDownList时,如何获取SelectedIndexChanged事件;,jquery,asp.net,ajax,webmethod,Jquery,Asp.net,Ajax,Webmethod,我创建了一个简单的示例,它使用ajax post方法调用WebMethod并从服务器端检索数据。除了它的SelectedIndexChanged事件外,一切正常 错误显示: 说明:执行当前web请求期间发生未经处理的异常。请查看堆栈跟踪,以了解有关错误的更多信息以及错误源于代码的位置。 异常详细信息:System.ArgumentException:回发或回调参数无效。在配置或页面中使用启用事件验证。出于安全目的,此功能验证回发或回调事件的参数是否源自最初呈现它们的服务器控件。如果数据有效且符合

我创建了一个简单的示例,它使用ajax post方法调用WebMethod并从服务器端检索数据。除了它的
SelectedIndexChanged
事件外,一切正常

错误显示:

说明:
执行当前web请求期间发生未经处理的异常。请查看堆栈跟踪,以了解有关错误的更多信息以及错误源于代码的位置。

异常详细信息:
System.ArgumentException:回发或回调参数无效。在配置或页面中使用启用事件验证。出于安全目的,此功能验证回发或回调事件的参数是否源自最初呈现它们的服务器控件。如果数据有效且符合要求,请使用ClientScriptManager.RegisterForEventValidation方法注册回发或回调数据以进行验证。

我也读过一些但是,我不想使用更新面板,也不想在服务器端进行填充。正如norbertB所建议的那样,禁用eventvalidation是一个坏主意,因为您会损失一点安全性,而且成本很低

我知道当我从客户端填充dropdownlist时,viewstate不会得到更新。那么,我应该如何解决这个问题呢

我的代码很简单

服务器端

<Services.WebMethod>
Public Shared Function getDDL() As ArrayList
    Dim arr As New ArrayList
    arr.Add(New DDLCls(1, "Nimesh"))
    arr.Add(New DDLCls(2, "Rahul"))
    arr.Add(New DDLCls(3, "Hiren"))
    arr.Add(New DDLCls(2, "Dipak"))
    Return arr
End Function
$.ajax({
    type: 'POST',
    url: 'Default.aspx/getDDL',
    data: '{}',
    contentType: 'application/json; charset=utf-8',
    datatype: 'json',
    success: function (data) {
        $.each(data.d, function (index, item) {
            $('#ddl').get(0).options[$('#ddl').get(0).options.length] = new Option(item.Display, item.Value);
        });
    },
    error: function (data) {
        alert('Error on web method call: ' + data);
    }
}
);
<asp:DropDownList ID="ddl" runat="server" AutoPostBack ="true" EnableViewState="false"></asp:DropDownList>
<input type="button" id="btnDate" onclick="getDate()"  value="Get Date" />
ASP.NET代码

<Services.WebMethod>
Public Shared Function getDDL() As ArrayList
    Dim arr As New ArrayList
    arr.Add(New DDLCls(1, "Nimesh"))
    arr.Add(New DDLCls(2, "Rahul"))
    arr.Add(New DDLCls(3, "Hiren"))
    arr.Add(New DDLCls(2, "Dipak"))
    Return arr
End Function
$.ajax({
    type: 'POST',
    url: 'Default.aspx/getDDL',
    data: '{}',
    contentType: 'application/json; charset=utf-8',
    datatype: 'json',
    success: function (data) {
        $.each(data.d, function (index, item) {
            $('#ddl').get(0).options[$('#ddl').get(0).options.length] = new Option(item.Display, item.Value);
        });
    },
    error: function (data) {
        alert('Error on web method call: ' + data);
    }
}
);
<asp:DropDownList ID="ddl" runat="server" AutoPostBack ="true" EnableViewState="false"></asp:DropDownList>
<input type="button" id="btnDate" onclick="getDate()"  value="Get Date" />


我的问题是“当
下拉列表在客户端填充时,是否可能获得
SelectedIndexChanged
事件?”

加载控件时,您的控件未注册到页面。您正在客户端填充下拉项,因此在这种情况下,有两种方法。1) 您可以将一个hiddenfield add value changed事件添加到它,并在下拉列表中相应地更改该hiddenfield的值,以便服务器端调用2)您需要通过客户端处理它。向其添加
onchange
事件,然后处理整个更改方法是否可以在
onchange
事件上使用javascript调用任何服务器端方法?正如我所说,hiddenfield是可选选项,可以是该选项。不知道它是否是最好的