问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

ASP.NET如何防止页面重复提交

发布网友 发布时间:2022-04-29 08:02

我来回答

3个回答

懂视网 时间:2022-05-19 14:47

问题背景:

手头上的KPI分类评级考核系统,页面的提交按钮是用LinkButton或者Button做的。当大量用户同时在线访问该站点时,应用程序服务器出现CPU占用100%的糟糕状况,页面会卡住不动,用户不明情况连续点击提交按钮重复提交,造成数据库中出现大量的重复数据。

其实,即便服务器没有崩掉,快速频繁点击提交按钮,也会出现重复提交的问题。

尝试过:1)在提交按钮的点击事件里设置提交按钮的Enabled属性 Enabled = false; ,这个属性设置在未拿到新页面前是无效的,问题依然存在;

    2)在客户端事件里js设置提交按钮的disabled disabled = true; ,此时提交按钮的服务端事件将不再执行;

    3)也试过点击提交按钮后马上弹出div遮罩层,效果也不理想,问题依然存在;

    4)加个HTML按钮,并将提交按钮隐藏,点击HTML按钮提交,在HTML按钮的客户端事件里使HTML按钮不可用(阻止重复提交),再触发提交按钮的服务器事件,页面回发后HTML按钮自动变得可用。此法可行,如有不足或有更好的方法,还望大家不吝赐教。

解决思路:

1)除了提交按钮LinkButton(ID为lbtSave)外,添加一个HTML按钮

<input type="button" id="htmlSave" value="提交" onclick="SingleSubmit()" />

2)隐藏lbtSave,注意不能通过设置lbtSave的Visible属性为False来实现隐藏,否则lbtSave的服务器事件lbtSave_Click将不能触发;可行办法:用 <div style="display:none;"></div> 包含lbtSave来实现隐藏或者直接用 #lbtSave{display:none;} 来实现隐藏

3)<head></head>标签中新增js代码,如下:

 <script type="text/javascript">
 function SingleSubmit()
 {
 document.getElementById("htmlSave").disabled = true;
 document.getElementById("lbtSave").click();
 }
 </script>

4)点击htmlSave,执行SingleSubmit()方法,使htmlSave不可用(阻止重复提交),触发lbtSave_Click事件

5)页面回发后,也就是lbtSave_Click事件执行完后,htmlSave自动变得可用。

为了模拟真实情景,在lbtSave_Click事件中增加5s的线程休眠 Thread.Sleep(5000); 。

以上所述是小编给大家介绍的Asp.net中阻止页面按钮多次提交的解决办法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

热心网友 时间:2022-05-19 11:55

用户点击提交按钮后,通过JavaScript脚本将提交按钮disable掉,同时显示动画提示用户系统正在处理,并触发服务器端事件。具体是通过在Page_Load事件中添加如下代码实现的:

//sb保存的是JavaScript脚本代码,点击提交按钮时执行该脚本
StringBuilder sb = new StringBuilder();
//保证验证函数的执行
sb.Append("if (typeof(Page_ClientValidate) == 'function') { if (Page_ClientValidate() == false) { return false; }};");
//点击提交按钮后设置Button的disable属性防止用户再次点击,注意这里的this是JavaScript代码
sb.Append("this.disabled = true;");
//用__doPostBack来提交,保证按钮的服务器端click事件执行
sb.Append(this.ClientScript.GetPostBackEventReference(this.btnSubmit, ""));
sb.Append(";");
//SetUIStyle()是JavaScript函数,点击提交按钮后执行,如可以显示动画效果提示后台处理进度
//注意SetUIStyle()定义在aspx页面中
sb.Append("SetUIStyle();");
//给提交按钮增加OnClick属性
this.btnSubmit.Attributes.Add("onclick", sb.ToString());

热心网友 时间:2022-05-19 13:13

点击一个提交按钮后讲提交按钮的Enabled设置为false
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? jquery 如何防止重复提交 如何防止多次提交同一个表单? 能看卫视中文台的网络直播 哪个APP可以直播地方台电视,比如东方卫视等 网络电视直播,在线电视直播,卫视直播,卫星电视 就在64414com 云南广电网络集团有限公司昭通分公司怎么样? B站房管出来干活是什么梗? 绥江电视台相约绥江现场直播在哪里看 微博为何每次都发送失败都要输验证码之后,才会发送成功 云南昭通那里有卖户户通电视卫星接收机的,不知道在哪里能卖到正品行货 昭通生活网 微博验证完身份不发验证码 谁知道云南昭通市昭阳区望海公园火把节演唱会直播的电视台是哪个台,网上怎么看? 云南昭通新闻联播在那个网站可以看直播? 为什么我的微博一聊天就要验证码啊? 别人发的过来,我发不过去 云南昭通电视台在网上可如何收看到? 掌上工商注册营业执照流程 python在mac还是win好 本钢板材股份有限公司能源总厂南芬供电车间的详细地址 本钢板材辽阳球团有限责任公司怎么样? 广州大学研究生分数线2020初试成绩 2020年广州大学考研复试分数线 22年广州大学研究生录取分数线 广州大学的物理与电子工程学院研究生历年录取分数线 广州大学研究生计算机分数线 2022年华南理工大学电子信息科学与枝术考研要多少分数线 广东工业大学自动化学院最近几年研究生分数线是多少?过线多少分能上? 广州大学在职教育硕士录取分数线是多少 广州大学研究生分数线文科分数会上涨吗2022年 广州大学2o15年考研复试分数线是多少 广州大学机械工程专业考研要多少分能过初试 毕业了,想集体给老师唱首歌,谁知道好的给老师的歌?(要歌名) 唱给老师的歌有哪些? 教师节给老师唱什么歌? 老师过生日应该唱什么歌给老师听啊? 急求!歌曲《我为老师唱支歌》 有哪些歌适合学生唱给老师? 教师大多很无私,如何帮助教师度过一个有意义的教师节? 为什么一到晚上奶水就变少了 电脑屏幕突然没电黑屏是怎么回事