我在 ASP.NET 触发按钮单击两次时遇到问题。该按钮位于 UpdatePanel 内,但当我单击它时,我会收到两次回发,然后单击两次按钮,然后两次调用我的 DAL(按此顺序)。我以前从未遇到过这种情况,将 AutoEventWireup 更改为 false 没有效果。我能想到的唯一解决方法是隐藏 Web 服务中的功能并使用 jQuery 处理复杂性,对于小项目我不想这样做。
Firebug 转储如下(这些都通过单击进行)。
将以下脚本放在页面的 ScriptManager 之后。
<script type="text/javascript">
var postbackControl = null;
var parm = Sys.WebForms.PageRequestManager.getInstance();
parm.add_beginRequest(BeginRequestHandler);
parm.add_endRequest(EndRequestHandler);
function BeginRequestHandler(sender, args)
{
postbackControl = args.get_postBackElement();
postbackControl.disabled = true;
}
function EndRequestHandler(sender, args)
{
postbackControl.disabled = false;
postbackControl = null;
}
</script>
是否您已将 jQuery
click()
挂接到按钮上,该按钮也通过 ASP.NET 隐式内联挂接到 onchange 上?
jQuery.change + 内联 onchange fn() 导致 fn 执行两次
或者您是否检查过是否已挂钩服务器端处理程序两次,既在标记中以声明方式,又在代码隐藏中以命令方式?
奇怪的是,这似乎是由一个狡猾的按钮 ControlAdapter 引起的,它在按钮标签内添加了一个跨度以使滑动门工作。
writer.AddAttribute(HtmlTextWriterAttribute.Type, "按钮");
毫无意义但有效
如果在 aspnet 表单中使用带有 Runat=Server 的
<button>
,则 onclick 将包含 __doPostback 调用。你需要附加一个“return false;”到 onclick,这样按钮就不会触发表单提交(回发)。
$("#buttonID").attr('onclick', $("#buttonID").attr('onclick')+";return false;")