You need to enable JavaScript to run this app. ASP.NET中jQuery弹窗文本框提交后后端仅读取首次输入值问题
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET中jQuery弹窗文本框提交后后端仅读取首次输入值问题

核心问题定位

之前实现里读不到最新值的根本原因是DOM中存在多个同名称的表单字段,服务端读取时默认匹配到了首次生成的残留字段:

  • 每次点击弹窗的确认/取消按钮时,代码都会新建一个name="discount_end"的隐藏域并追加到表单里
  • 第一次操作生成的隐藏域会一直留在DOM中,后续操作新增的同名隐藏域不会覆盖它
  • 按照WebForm的表单提交规则,同名称字段存在多个时,Request.Form默认返回序列里的第一个值,也就是你第一次输入后生成的旧值,后续输入的新值哪怕赋值给了新的隐藏域,也不会被服务端读到

修复方案

调整前端JS逻辑,从源头上避免重复字段

  • 弹窗触发时,先把所有已存在的name="discount_end"隐藏域全部从DOM中删除,彻底清掉历史残留
  • 只创建一次目标隐藏域,提前追加到表单中,后续所有操作只更新这个隐藏域的value,不再重复新建
  • 提交回发前,同步把弹窗文本框的最新输入值赋值给这个固定的隐藏域,再触发回发

修改后的完整JS代码:

function DiscountAtLast(chk) {
    // 清理所有历史残留的同名称隐藏域,杜绝多值干扰
    const oldHiddenInputs = document.forms[0].querySelectorAll('input[name="discount_end"]');
    oldHiddenInputs.forEach(el => el.remove());

    // 仅创建一次隐藏域,后续不重复生成
    const discount_end = document.createElement("INPUT");
    discount_end.type = "hidden";
    discount_end.name = "discount_end";
    document.forms[0].appendChild(discount_end);

    if (chk.checked) {
        $("#popupdiv").dialog({
            title: "Login Info",
            resizable: false,
            height: "auto",
            width: 400,
            modal: true, // 开启模态,避免弹窗未关闭时用户操作页面造成值不同步
            buttons: {
                Cancel: function () {
                    // 同步当前输入值到隐藏域
                    discount_end.value = $("[id*=pass]").val();
                    $(this).dialog("close");
                    return false;
                },
                Ok: function () {
                    // 提交前同步最新输入值
                    discount_end.value = $("[id*='pass']").val();
                    $(this).dialog("close");
                    // 确认值同步完成后再触发回发
                    __doPostBack('<%=btnDiscountAtEnd.UniqueID%>', "");
                    return true;
                }
            }
        });
    }
}

服务端代码无需调整

只要保证表单内仅存在一个name="discount_end"的字段,且每次提交前同步为弹窗的最新输入值,原有的Request.Form["discount_end"]逻辑就会正确读取当次的用户输入,不会再返回首次的旧值。

补充说明:因为带runat="server"的ASP.NET TextBox会通过ViewState持久化旧值,如果你后续尝试直接读服务端TextBox的Text属性拿值,会受ViewState的缓存影响,不如用固定隐藏域传值的方式稳定可靠。


内容的提问来源于stack exchange,提问作者shakeel ahmad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 00:06:03