asp:保存表单时,使用jquery ajax填充的下拉列表不会将所选值传递给服务器端

asp:保存表单时,使用jquery ajax填充的下拉列表不会将所选值传递给服务器端,jquery,asp.net,webforms,Jquery,Asp.net,Webforms,我有2个asp DropDownList控件。第一种方法是在加载页面时,在服务器端用代码填充值。当用户从第一个列表中选择一个项目时,我有一个jqueryajax方法来获取并填充第二个下拉列表的值 function getSubtaksForDdl() { var $adl_type = $("#<%=hfADL_Type.ClientID%>").val(); var $tt = $("#<%=ddlTaskType.ClientID%> option:selec

我有2个asp DropDownList控件。第一种方法是在加载页面时,在服务器端用代码填充值。当用户从第一个列表中选择一个项目时,我有一个jqueryajax方法来获取并填充第二个下拉列表的值

function getSubtaksForDdl() {
    var $adl_type = $("#<%=hfADL_Type.ClientID%>").val();
var $tt = $("#<%=ddlTaskType.ClientID%> option:selected").val();

$.ajax({
    url: '../../Ajax/answers.asmx/getSubTasks',
    cache: false,
    type: 'POST',
    contentType: "application/json; charset=utf-8",
    data: '{ _adl: "' + $adl_type + '", _task: "' + $tt + '"}',
    dataType: 'json',                
    success: function (data) {
        if (data.d != null) {
        $("#<%=ddlSubtask.ClientID%>").prop("disabled", false);
        $("#<%=ddlSubtask.ClientID%>").empty();
        $.each(data.d, function (key, value) {
            $("#<%=ddlSubtask.ClientID%>").append($("<option></option>").val
        (value.Sequence).html(value.SubTaskName));
            });
        }
    }
  });
};
我为页面启用了EnableEventValidation=“false”。如果我将其去掉,则会得到“无效的回发或回调参数…”按顺序使用ClientScriptManager.RegisterForEventValidation方法 注册回发或回调数据以进行验证。“

这是我错过的东西吗?我必须做些什么才能让codebehind识别已选择的列表项

更新:

直到我找到正确的方法或者有人回答之前,我发现所选的值处于ViewState中,我可以这样访问它

var value = HttpContext.Current.Request.Form["ctl00$MainContent$ddlSubtask"];
此时,我可以使用save方法将其保存回数据库


现在的另一个问题是,这个关键每次都会改变,即,我发布网站,并部署到生产环境中,ddlSubtask dropdownlist的关键是否会有所不同?…在这种情况下,这个临时解决方案根本就不是解决方案

无法获取第二个下拉列表服务器端的值, 因为您正在将数据绑定到下拉客户端,而服务器对此一无所知。服务器仍然认为下拉列表为空

根据OP,可以通过检查HttpContext.Current.Request.Form属性来检索该值

var value = HttpContext.Current.Request.Form["[unique ID of control]"];

第二个选项是将所选值存储在隐藏字段中,并从隐藏控件服务器端读取该值。

该值位于表单对象中。见我上面的编辑。一定有办法做到这一点而不需要像从表单中获取值这样的技巧?我不知道可以从表单对象中获取值…Thnx用于共享。除了我所说的存储在隐藏字段并在服务器端使用之外,我不知道其他的方法。当你问到ID是否会改变时,它不会改变,它会保持不变。是的,我通过javascript获取所选值,然后像你说的那样将其存储在隐藏字段中。
var value = HttpContext.Current.Request.Form["[unique ID of control]"];