You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET表单中onsubmit禁用按钮后无法提交的原因咨询

问题根源分析

你的问题出在ASP.NET Web Forms的回发机制和禁用按钮的时机冲突上,具体细节如下:

  1. ASP.NET的服务器端按钮(<asp:Button>)渲染后会变成type="submit"的HTML按钮,而ASP.NET的回发逻辑完全依赖这个按钮的name和value参数——服务器需要通过这两个值识别是哪个控件触发了回发,才能找到对应的OnClick事件处理方法(也就是你的OnAddFilesToApplicationClick)。
  2. 你的disableButtons函数在表单提交的瞬间立即禁用了按钮,这会导致浏览器收集表单数据时,不会包含被禁用按钮的name和value。服务器接收不到触发回发的控件标识,自然无法执行对应的事件处理,看起来就像是表单“没提交”。
解决方案

你需要调整禁用按钮的时机,给浏览器足够时间完成表单数据收集后再禁用按钮。最简单的实现方式是用setTimeout做几毫秒的延迟:

function disableButtons() {
    // 延迟10ms禁用按钮,确保表单数据已被浏览器收集完毕
    setTimeout(function() {
        var buttons = $("input[type=submit]");
        buttons.prop("disabled", true);
    }, 10);
    return true;
}

如果想更精准,还可以只禁用当前触发回发的按钮(而非所有提交按钮),适配ASP.NET的回发机制:

function disableButtons() {
    // ASP.NET会把触发回发的控件ID存在__EVENTTARGET隐藏域中
    var targetBtnId = document.getElementById('__EVENTTARGET').value;
    var targetButton = document.getElementById(targetBtnId);
    if (targetButton) {
        setTimeout(function() {
            targetButton.disabled = true;
        }, 10);
    }
    return true;
}

这样既实现了防止重复点击的需求,又不会破坏ASP.NET的回发逻辑。

内容的提问来源于stack exchange,提问作者Anders Lindén

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:22:19