asp:保存表单时,使用jquery ajax填充的下拉列表不会将所选值传递给服务器端
我有2个asp DropDownList控件。第一种方法是在加载页面时,在服务器端用代码填充值。当用户从第一个列表中选择一个项目时,我有一个jqueryajax方法来获取并填充第二个下拉列表的值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
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]"];