我有一个表单,在提交按钮单击时在数据库中插入数据,但问题是当客户端多次单击该按钮时,它发送多个创建请求意味着同一数据的同一时间的多个按钮单击事件,这不是必须的。
我尝试在客户端第一次单击“提交”按钮时禁用该按钮但在此之后它不会调用服务器单击事件处理程序,或者在禁用后不会触发服务器单击事件。
如何处理此多次点击问题..
我使用以下代码禁用按钮
<script type="text/javascript">
function checkAuth(obj)
{
if(Page_ClientValidate("ValidationGroupName"))
obj.disabled=true;
}
</script>
<asp:Button ID="btnSubmit" runat="server" Text="Submit"
OnClick="btnSubmit_click" OnClientClick="checkAuth(this)" CssClass="FormButton"
ValidationGroup="ValidationGroupName" />
答案 0 :(得分:5)
不要禁用该按钮,只是阻止第二次提交。
这个小脚本完成了这项工作,但它假设某个时刻有回发。
var formhandler = function() {
var submit, isSubmit = false;
submit = function(){
// flop and return false once by the use of operator order.
return isSubmit != (isSubmit = true);
};
return {
submit: submit
};
}(); // <-- use direct invcation to keep the internal variables "static"
附上:
document.forms[0].onsubmit = formhandler.submit;
或
OnClientClick = "formhandler.submit()";
答案 1 :(得分:1)
在<input type="hidden">
字段中添加唯一ID。然后在服务器上检查请求是否已被处理。
作为ID,您可以生成GUID。然后你只需要一些结构来收集当前有效的ID。例如一个字典。然后,您可以不时地从结构中清除旧ID,当然,在使用它时将其删除。
答案 2 :(得分:0)
你所要做的就是拥有一些禁用按钮的客户端javascript。类似于:
document.myform.mybutton.disabled = true;
如果你将它包装在一个函数中,并设置按钮的onClientClick
属性来触发它。一旦点击它就会被禁用 - 但仍然会向服务器生成请求。
事件没有像您上面提到的那样触发的原因很可能是因为您禁用了服务器端(不是客户端),这是