如何防止在使用ajax或javascript时重复提交?

如何防止在使用ajax或javascript时重复提交?,javascript,c#,jquery,ajax,Javascript,C#,Jquery,Ajax,我在c#中有一个控制器,控制器中有一个保存方法。save方法保存/更新通过submit按钮单击和javascript提交的数据。问题是,如果您多次单击按钮,它应该只处理第一次单击,其余的按钮应该被标识为重复提交,并且应该被控制器丢弃。如何在c#mvc web应用程序中执行此操作?单击按钮后禁用该按钮。因此,只需单击一次即可。单击按钮后禁用该按钮。因此,只需单击一次即可。简单方式 当点击按钮时,它被禁用,然后在从ajax获得响应结果后再次激活!你也可以添加加载器,使你的网站看起来很酷 提交 b

我在c#中有一个控制器,控制器中有一个保存方法。save方法保存/更新通过submit按钮单击和javascript提交的数据。问题是,如果您多次单击按钮,它应该只处理第一次单击,其余的按钮应该被标识为重复提交,并且应该被控制器丢弃。如何在c#mvc web应用程序中执行此操作?

单击按钮后禁用该按钮。因此,只需单击一次即可。

单击按钮后禁用该按钮。因此,只需单击一次即可。

简单方式

  • 当点击按钮时,它被禁用,然后在从ajax获得响应结果后再次激活!你也可以添加加载器,使你的网站看起来很酷
提交
btnSend=document.getElementById(“btnSend”);
函数send(){
btnSend.disabled=true;
//在此处设置禁用按钮
$.ajax({type:“GET”,
url:“http://www.google.de",   
async:false,
成功:函数(文本)
{
btnSend.disabled=false;
//将活动设置为按钮
//在这里添加您的代码
},
失败:函数(文本)
{
btnSend.disabled=false;
//将活动设置为按钮
//在这里添加您的代码
}
});
}

简单方法

  • 当点击按钮时,它被禁用,然后在从ajax获得响应结果后再次激活!你也可以添加加载器,使你的网站看起来很酷
提交
btnSend=document.getElementById(“btnSend”);
函数send(){
btnSend.disabled=true;
//在此处设置禁用按钮
$.ajax({type:“GET”,
url:“http://www.google.de",   
async:false,
成功:函数(文本)
{
btnSend.disabled=false;
//将活动设置为按钮
//在这里添加您的代码
},
失败:函数(文本)
{
btnSend.disabled=false;
//将活动设置为按钮
//在这里添加您的代码
}
});
}

我还将禁用客户端上的按钮。但您也可以检查提交的数据是否与存储的数据不同。如果没有进行任何更改,您可以直接返回,而无需进一步保存逻辑


是否可以只保存一次数据?在特殊情况下,保存后重定向到其他视图可能是一种可行的解决方案。

我还将禁用客户端上的按钮。但您也可以检查提交的数据是否与存储的数据不同。如果没有进行任何更改,您可以直接返回,而无需进一步保存逻辑


是否可以只保存一次数据?在特殊情况下,保存后重定向到其他视图可能是一种可行的解决方案。

给表单一个一次性标记。当服务器接收回令牌时,它可以决定它是否已经被使用。或者,你知道,只是在客户端禁用提交。是否有任何库可以这样做,或者我需要疯狂地维护它?可能有。我不确定。我通常只是在客户端禁用按钮(为用户提供适当的反馈)。您可以在保存按钮时禁用按钮,也可以使用类似“isSaving”的布尔标志,因此,您可以在操作开始时检查此标志。使用javascript禁用按钮不是一个好主意,因为如果用户知道如何启用此标志,则没有任何好处。请为表单提供一次性令牌。当服务器接收回令牌时,它可以决定它是否已经被使用。或者,你知道,只是在客户端禁用提交。是否有任何库可以这样做,或者我需要疯狂地维护它?可能有。我不确定。我通常只是在客户端禁用按钮(为用户提供适当的反馈)。您可以在保存按钮时禁用按钮,也可以使用类似“isSaving”的布尔标志,因此,您可以在操作开始时检查该标志。使用javascript禁用按钮不是一个好主意,因为如果用户知道如何启用该标志,那么它没有任何好处。但是任何具有javascript技能的人都可以从用户端启用它。是的,当然可以做到。但如果它现在起作用的话,我认为它是好的。他以后可以考虑加密并使他的代码更安全。@eliaszaman任何有一定技能的人也可以手动执行请求,但任何有javascript技能的人都可以从用户端启用它。当然可以。但如果它现在起作用的话,我认为它是好的。他以后可以考虑加密并使他的代码更安全。@eliaszaman任何有一定技能的人也可以手动执行请求
<button id="btnSend" onClick="send()">submit</button>

<script>

btnSend=document.getElementById("btnSend");

function send(){

  btnSend.disabled=true;
  //set disabled button here

  $.ajax({ type: "GET",   
           url: "http://www.google.de",   
           async: false,
           success : function(text)
           {
                btnSend.disabled=false;
                //set active to button 
                
                // add your code here
           },

           fail : function(text)
           {
                btnSend.disabled=false;
                //set active to button 

                // add your code here
           }
  });

}

</script>