ASP.NET表单中onsubmit禁用按钮后无法提交的原因咨询
问题根源分析
你的问题出在ASP.NET Web Forms的回发机制和禁用按钮的时机冲突上,具体细节如下:
- ASP.NET的服务器端按钮(
<asp:Button>)渲染后会变成type="submit"的HTML按钮,而ASP.NET的回发逻辑完全依赖这个按钮的name和value参数——服务器需要通过这两个值识别是哪个控件触发了回发,才能找到对应的OnClick事件处理方法(也就是你的OnAddFilesToApplicationClick)。 - 你的
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
相关产品推荐
相关产品推荐

