jquery - ASP :dropdown that is populated with jquery ajax doesnt pass selected value to server side when saving form

标签 jquery asp.net webforms

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

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));
            });
        }
    }
  });
};

这一切都很好。

问题是当您保存页面并且我尝试获取代码隐藏中的 ddlSubtask 下拉列表的 SelectedValue 时,它​​始终为空 ("")。

if (!String.IsNullOrEmpty(ddlSubtask.SelectedValue)) {
    carePlanADL.SubTaskType = Convert.ToInt32(ddlSubtask.SelectedValue);
}

我的页面有 EnableEventValidation="false"。如果我把它拿出来,那么我会得到“无效的回发或回调参数......按顺序使用 ClientScriptManager.RegisterForEventValidation 方法 注册回发或回调数据以进行验证。”

这是我缺少的东西吗?我需要做什么才能让代码隐藏来识别已选择列表项。

更新:

直到我弄清楚如何以正确的方式做到这一点或有人回答,我发现所选值位于 ViewState 中,我可以像这样访问它

var value = HttpContext.Current.Request.Form["ctl00$MainContent$ddlSubtask"];

此时我可以在 save 方法中将其保存回数据库。

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

最佳答案

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

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

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

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

关于jquery - ASP :dropdown that is populated with jquery ajax doesnt pass selected value to server side when saving form,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22058840/

相关文章:

c# - 当我在另一个选项卡中执行操作时,asp.net 会加载到第一个选项卡

javascript - AJAX POST 请求在 POSTMAN 中有效,但在 Chrome 中无效

javascript - 如何默认 Html.DropDownList 不选择?

javascript - JQuery 中的 ASP.NET 单选按钮开关

c# - 我应该学习什么CMS?仅限.Net

c# - 是否可以从 ASP.NET 路由推断站点地图?

jquery - 如何在不使用大图像或小图像/单图像的情况下使用 Elevatezoom 悬停缩放图像

javascript - jQuery html() 表现真的很慢

php - 使用 ASP、ASP.NET 2.0 或 PHP5 在 IIS6 上无超时的开源文件上传

c# - 如何使用 MVC 4 应用程序运行 Asp.net Webforms 网站