惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
L
LangChain Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
罗磊的独立博客
J
Java Code Geeks
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 叶小钗
小众软件
小众软件
博客园 - Franky
D
Docker
Google DeepMind News
Google DeepMind News
Microsoft Azure Blog
Microsoft Azure Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
U
Unit 42
宝玉的分享
宝玉的分享
C
Check Point Blog
B
Blog
V
V2EX
博客园 - 三生石上(FineUI控件)
MyScale Blog
MyScale Blog
The Cloudflare Blog
博客园 - 聂微东
博客园_首页
Engineering at Meta
Engineering at Meta

博客园 - zhouruixi0728

通过数据库生成CodeFirst实体类(带字段中文名称) ASP.NET Simple OOXML导出Excel,Word 提高编码效率的一些经验 刷访问量程序 解决Ext Tab 从ifram1页刷新ifram2页 ext控件宽度变小的bug Repeater没有数据时显示空行 - zhouruixi0728 - 博客园 水晶报表添加字段 asp.net项目注意事项 - zhouruixi0728 - 博客园 清空sql2005数据库日志 还原卡破解(联想机房管家) asp.net ModalPopupExtender实现指定位置弹出 C# 多线程辅助类实现多任务 sql2005导出Excel错误解决方法 C#word转pdf失败解决方法 如何判断IIS版本 判断IIS中.NET2.0是否注册 一个委托的小例子 C# XceedFtp下载卡死解决方案 SQL 两表之间拷贝复制数据 C# tcp发送消息和传输文件
防止页面重复提交,插入重复数据的解决办法
zhouruixi0728 · 2011-07-05 · via 博客园 - zhouruixi0728

问题

新做的物业收费系统,当用户点击收费按钮的时候,如果点击多次会生成两张收款单,发现问题后通过

http://www.cnblogs.com/happyhippy/archive/2010/08/15/1800289.html

在按钮click的js事件里面加了

lnkCharge.Attributes["onclick"= this.GetPostBackEventReference(this.lnkCharge) + ";this.disabled=true;"//防止重复提交

本机测试通过,不过第二天用户还是有重复收款单出现...

最终解决方案 利用ID不能重复的特性

感觉这种控制在客户端做还是不是很保险,所以把解决的方向放在了后台代码里面,不过前台的禁按钮还是得有的

因为我们做的收款单表是用guid做ID的,所以我们可以在页面!ispostboack的时候生成一个临时的GUID,存到viewstate中

        if (!IsPostBack)
        {
            TempID 
= Guid.NewGuid().ToString();

然后在收费按钮事件里插入收款单数据的时候用这个GUID做ID,因为ID不能重复,所以这样就肯定不会插入重复GUID的收款单了

当前插入之前最好判断一下这个GUID是否已经存在了

        Model.CollectionInfo collection = new Model.CollectionInfo();
        collection.ID 
= new Guid(TempID);

        if (new BLL.BCollection().GetCount(new Model.SearchClass.CollectionSearch().ID(TempID)) > 0)
        {
            ScriptAlert("此页面收费项已收费,不能重复收费");
            return;
        }
        Guid collectionid = Guid.Empty;
        try
        {
            collectionid = new BLL.BCollection().Insert(collection);
        }
        catch
        {
            ScriptAlert("此页面收费项已收费,不能重复收费");
            return;
        }