防止多次提交的几个比较

1、利用Session(viewState是不行的,viewState要回传才能读到数据)
如果有个数据包类StockBillMP,则设定
 
None.gif        private StockBillMP M_saveobj
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif{
InBlock.gif            
get
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
return (Session["saveobj"== null)?null:(StockBillMP)Session["saveobj"];
ExpandedSubBlockEnd.gif            }

InBlock.gif            
set
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                Session[
"saveobj"= value;
ExpandedSubBlockEnd.gif            }

ExpandedBlockEnd.gif        }
    

然后用比较函数
 
None.gif        private bool checkIsRepeate(StockBillMP objRet)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif{
InBlock.gif            
bool bret = true;  //假设是重复的,不重复就退出
InBlock.gif
            
InBlock.gif            
for(int i=1;i<objRet.objMainProc.arrParams.Length;i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
string strOld = M_saveobj.objMainProc.arrParams[i].Value.ToString().Trim();
InBlock.gif                
string strNew = objRet.objMainProc.arrParams[i].Value.ToString().Trim();
InBlock.gif                
if (strOld != strNew)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    bret 
= false;
InBlock.gif                    
break;
ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }

InBlock.gif            
if (bret)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
for(int i=0;i<objRet.arrSubProc.Length;i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    
for(int j=1;j<objRet.arrSubProc[i].arrParams.Length;j++)
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
dot.gif{
InBlock.gif                        
string strOld = M_saveobj.arrSubProc[i].arrParams[j].Value.ToString().Trim();
InBlock.gif                        
string strNew = objRet.arrSubProc[i].arrParams[j].Value.ToString().Trim();
InBlock.gif                        
if (strOld != strNew)
ExpandedSubBlockStart.gifContractedSubBlock.gif                        
dot.gif{
InBlock.gif                            bret 
= false;
InBlock.gif                            
break;
ExpandedSubBlockEnd.gif                        }

InBlock.gif                        bret 
= true;
ExpandedSubBlockEnd.gif                    }

InBlock.gif                    
if(!bret)
InBlock.gif                        
break;
ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }
                                     
InBlock.gif            
InBlock.gif            
return bret;
ExpandedBlockEnd.gif        }

保存成功就更改Session
None.gifM_saveobj = objRet;

代价是惨重的,效果还可以,整个包啊
当然仅仅是实现防止提交速度慢,连续点击的情况是设定一个bool变量就可以了,效果如2检查按钮。

2、检查按钮
http://bestcomy.cnblogs.com/archive/2005/10/10/251507.html
此处提供的代码用来实现当asp.net页面中的某个Button被点击后disable掉该页面中所有的Button,从而防止提交延时导致的多次提交。基于之前的onceclickbutton脚本.

<script language="javascript">
        
<!--
        
        
function disableOtherSubmit()
        {            
var obj = event.srcElement;
            
var objs = document.getElementsByTagName('INPUT');
            
for(var i=0; i<objs.length; i++)
            {
                
if(objs[i].type.toLowerCase() == 'submit')
                {
                    objs[i].disabled 
= true;
                }
            }        }
            
        
//-->
        </script>
public class PreventMultiClick : System.Web.UI.Page
    {
        
protected System.Web.UI.WebControls.Button Button1;
        
protected System.Web.UI.WebControls.Button Button2;
        
protected System.Web.UI.WebControls.LinkButton LinkButton1;
        
protected System.Web.UI.WebControls.Button Button3;
    
        
private void Page_Load(object sender, System.EventArgs e)
        {
            
this.GetPostBackEventReference(this.Button3);        //保证 __doPostBack(eventTarget, eventArgument) 正确注册
            if(!IsPostBack)
            {
                System.Text.StringBuilder sb 
= new System.Text.StringBuilder();
                sb.Append(
"if (typeof(Page_ClientValidate) == 'function') { if (Page_ClientValidate() == false) { return false; }}");    //保证验证函数的执行
                sb.Append("if(window.confirm('are you sure?')==false) return false;");        //自定义客户端脚本
                sb.Append("disableOtherSubmit();");        // disable所有submit按钮
                sb.Append(this.GetPostBackEventReference(this.Button3));    //用__doPostBack来提交,保证按钮的服务器端click事件执行
                sb.Append(";");
                Button3.Attributes.Add(
"onclick",sb.ToString());
            }
        }

        
#region Web Form Designer generated code
        
override protected void OnInit(EventArgs e)
        {
            
//
            
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
            
//
            InitializeComponent();
            
base.OnInit(e);
        }
        
        
/// <summary>
        
/// Required method for Designer support - do not modify
        
/// the contents of this method with the code editor.
        
/// </summary>
        private void InitializeComponent()
        {    
            
this.Button3.Click += new System.EventHandler(this.Button3_Click);
            
this.Load += new System.EventHandler(this.Page_Load);

        }
        
#endregion

        
private void Button3_Click(object sender, System.EventArgs e)
        {
            System.Threading.Thread.Sleep(
3000);
            Response.Write(
"Hello world!");
        }
    }

此处只是disable掉所有的submit button, 我觉得其它的可提交控件也是可以通过类似的方法来disable的.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305819.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【日常排雷】 .Net core 生产环境appsetting读取失败

关键词System.ArgumentNullException: String reference not set to an instance of a String. (Parameter s)1.问题出现某年某月某日&#xff0c;把webapi开发完了&#xff0c;也通过了swagger进行了单元测试。dotnet build dotnet publish -o publish dotnet .\publish\xx.We…

ABP vNext 自动注入,暗藏天坑如斯

导言我们在使用ABP vNext框架时&#xff0c;都知道该框架为我们实现了自动依赖注入(实现自动注入需要在项目里面创建Module类&#xff0c;并且将Module类上的DependsOn到相应的启动Module类或调用Module类&#xff0c;这步很关键)自动注入示例只要我们实现如下接口&#xff1a;…

Community Server系列之四:Ajax在CS2.0中的应用1

Ajax技术在时下很热门&#xff0c;当然在CS2.0中也不例外的运用到了此技术&#xff0c;CS2中没有使用任何第三方Ajax控件&#xff0c;这就给我们提供一个研究Ajax机理的好地方&#xff0c;现介绍一下在CS2中Ajax的一些简单应用&#xff0c;并分析应用的原理。 我想要研究此技术…

为什么人和人的差距这么大?

点击蓝字关注&#xff0c;回复“职场进阶”获取职场进阶精品资料一份这是一篇去年写的旧文&#xff0c;不少读者从这篇文章中获得了一些方法和力量&#xff0c;于是再分享下&#xff1a;工作和生活中不光要埋头干活&#xff0c;还要抬头看天。思考总结方法论是提升认知的必备途…

github可以传java吗_如何在github上传本地项目代码(新手使用)----亲测使用

首先你要在github上申请一个账号然后你要下载一个git工具进入官网直接下载就行&#xff0c;下载完成后进入github首页&#xff0c;点击新项目new repository(新建)&#xff0c;如下图所示&#xff1a;然后进入如下页面&#xff0c;主要填写红色圈起来的几个部分&#xff0c;如下…

【One by One系列】IdentityServer4(一)OAuth2.0与OpenID Connect 1.0

在微服务场景中&#xff0c;身份认证通常是集中处理&#xff0c;这也是有别于单体应用一把梭哈的模式&#xff0c;其中&#xff0c;在微软微服务白皮书中&#xff0c;提供了两种身份认证模式&#xff1a;网关&#xff0c;没错&#xff0c;原话是If youre using an API Gateway,…

ABP vNext分布式事件总线RabbitMQ注意事项

[https://docs.abp.io/zh-Hans/abp/latest/Distributed-Event-Bus-RabbitMQ-Integration](ABP vNext官方文档链接)&#xff0c;基本使用可直接阅读官方文档&#xff0c;云怀不重复造轮子&#xff0c;只做官方未提到但重要的说明关键配置说明关键配置类&#xff1a;AbpRabbitMqE…

去除代码行号的一个小程序(控制台版本)

清风竹林发布了去除代码行号的一个小程序,确实方便大家收集一些文章代码,但个人认为象这样的小东东&#xff0c;要使广大网友能拿来就用&#xff0c;用.Net 2.0做成WinForm&#xff0c;有点贵族化了&#xff0c;于是动手整出个平民化的控制台版本&#xff0c;可以清除指定的文本…

. NET5实战千万高并发项目,性能吊打JAVA,C#排名万年老五,有望逆袭!

“秒杀活动”“抢红包”“微博热搜”“12306抢票”“共享单车拉新”等都是高并发的典型业务场景&#xff0c;那么如何解决这些业务场景背后的难点问题呢&#xff1f;秒杀系统中&#xff0c;QPS达到10万/s时&#xff0c;如何定位并解决业务瓶颈&#xff1f;明星婚恋话题不断引爆…

ABP vNext 审计日志获取真实客户端IP

背景在使用ABP vNext时&#xff0c;当需要记录审计日志时&#xff0c;我们按照https://docs.abp.io/zh-Hans/abp/latest/Audit-Logging配置即可开箱即用&#xff0c;然而在实际生产环境中&#xff0c;某些配置并不可取&#xff0c;比如今天的主角——客户端IP&#xff0c;记录用…

郭昶

郭 昶左直拳饰演《外来媳妇本地郎》中康家老二康祁宗的演员郭昶6月14日去世了&#xff0c;胃癌&#xff0c;享年50岁。这个消息真令人难以置信&#xff0c;不胜嘘唏。 《外来媳妇本地郎》在广东这边很受欢迎&#xff0c;每集结尾那带有浓厚岭南特色的粤曲小调在胡同小巷时有…

ABP vNext IOC替换原有Service实现

即 .NET IOC替换原有Service实现背景在使用ABP vNext时&#xff0c;该框架为我们实现了非常多的默认行为&#xff0c;以便开箱即用&#xff0c;但在实际使用中&#xff0c;我们总是需要根据自己的需求定制自己的服务&#xff0c;在.Net框架中&#xff0c;便提供了Service.Repla…

aqs java 简书,Java AQS源码解读

1、先聊点别的说实话&#xff0c;关于AQS的设计理念、实现、使用&#xff0c;我有打算写过一篇技术文章&#xff0c;但是在写完初稿后&#xff0c;发现掌握的还是模模糊糊的&#xff0c;模棱两可。痛定思痛&#xff0c;脚踏实地重新再来一遍。这次以 Java 8源码为基础进行解读。…

dnSpy反编译、部署调试神器

一、概要在工作当中&#xff0c;当程序部署了之后就算打了日志遇到极个别的特殊异常没有在程序日志中体现出来或者没有详细的报错原因会让开发者非常头疼&#xff0c;不得不盲猜bug到底出在哪里。这里分享一下工作上经常会用到的工具&#xff0c;这款工具可以反编译并运行调试已…

java中内边距跟外边距,padding和margin——内边距和外边距

一、padding——内边距(内填充)1.1、padding 简写属性在一个声明中设置所有填充属性。该属性可以有1到4个值。div.outer{width: 400px;height: 400px;border: 2px solid #000;}div.inner{width: 200px;height: 200px;background-color:red ;padding: 50px;}运行效果图&#xff…

AJAX将成为移动Web2.0时代首选开发平台

一、 引言  最近,Opera宣布通过他们的浏览器把AJAX技术应用于移动设备开发中。考虑到Opera浏览器在目前浏览器市场(特别是在移动浏览器市场)的流行性,我们可以预计这一宣布对于整个浏览器市场必然会产生重要影响。从加入到移动服务开发市场几年的经验来看&#xff0c;我相信现…

使用 ML.NET 实现峰值检测来排查异常

机器学习中一类问题称为峰值检测&#xff0c;它旨在识别与大部分时序中明显不同但临时突发的数据值。及时检测到这些可疑的个体、事件或观察值很重要&#xff0c;这样才能尽量减少其产生。异常情况检测是检测时序数据离群值的过程&#xff0c;在给定的输入时序上指向“怪异”或…

PHP防QQ列表右划,react native 实现类似QQ的侧滑列表效果

如果列表行数据需要更多的操作&#xff0c;使用侧滑菜单是移动端比较常见的方式&#xff0c;也符合用户的操作习惯&#xff0c;对app的接受度自然会相对提高点。最近得空就把原来的react-native项目升级了侧滑操作&#xff0c;轻轻松松支持android和ios双平台&#xff0c;效果如…

OpenTelemetry - 云原生下可观测性的新标准

CNCF 简介CNCF&#xff08;Cloud Native Computing Foundation&#xff09;&#xff0c;中文为“云原生计算基金会”&#xff0c;CNCF是Linux基金会旗下的基金会&#xff0c;可以理解为一个非盈利组织。当年谷歌内部一直用于编排容器的Borg项目开源了&#xff0c;为了该项目更好…

毕业设计——第三章 开发方法及系统实现(5)

国内私募机构九鼎控股打造APP&#xff0c;来就送 20元现金领取地址&#xff1a;http://jdb.jiudingcapital.com/phone.html内部邀请码&#xff1a;C8E245J &#xff08;不写邀请码&#xff0c;没有现金送&#xff09;国内私募机构九鼎控股打造&#xff0c;九鼎投资是在全国股份…