首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 关于重复提交问题,顶者有分? [已结贴,结贴人:lizh0103]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lizh0103
    • 等级:
    发表于:2008-07-18 11:21:06 楼主
    button 按钮事件代码:
    protected void btnOK_Click(object sender, EventArgs e)
        {
           
           
           
          //省略一些判断
          Add();
          Response.Redirect("hengji_io.aspx");  //页面跳转
        }
    我按钮回车快点连着多按几次就重复提交了,调试跟踪发现,在执行完Add方法后,并没有执行下面的 页面跳转语句,而是又从按钮事件开始 判断 然后 Add() ; 请问这样什么原因造成的???

    然后 我在 button 的 OnClientClick="this.disabled=true;this.form.submit();" UseSubmitBehavior="False" 但是还是有重复提交!请问各位高手帮忙!

    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 11:24:221楼 得分:13
    OnClientClick="this.disabled=true;if (!this.disabled){this.form.submit();}" UseSubmitBehavior="False"
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 11:24:242楼 得分:1
    我也纳闷
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 11:24:473楼 得分:1
    OnClientClick="if (!this.disabled){this.disabled=true;this.form.submit();}" UseSubmitBehavior="False"
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 11:26:204楼 得分:1
    跳转换成这样试试

    string url = " <script>window.open('../DeliverManage/Dengji.aspx?id=" + link.Text + "&type=new', 'Sample', 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,copyhistory=yes,width=850px,height=175px,top=80,left=200');window.location.href=window.location.href; </script>";
                    ClientScript.RegisterClientScriptBlock(typeof(string), "df5esie3ds", url);
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 11:28:015楼 得分:1
    你的Add()方法有问题没?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • silentwins
    • 等级:
    发表于:2008-07-18 11:28:526楼 得分:1
    在页面设置个bool型的ViewState变量,默认为false

    btnOK里面判断改值是否为false,如果为false继续执行,如果为true则跳出,
    在Add()前面加一行设置该变量为true的代码
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 11:29:107楼 得分:1
    关注
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lizh0103
    • 等级:
    发表于:2008-07-18 14:26:058楼 得分:0
    在页面设置个bool型的ViewState变量,默认为false

    btnOK里面判断改值是否为false,如果为false继续执行,如果为true则跳出,
    在Add()前面加一行设置该变量为true的代码
    ---
    我用这个方法,怎么判断出来 还是false的啊
    代码如下:

        private  bool IsSubmit
        {
            get { return ViewState["issubmit"] == null ? false : (bool)ViewState["issubmit"]; }
            set { ViewState["issubmit"] = value;  }

        }

      protected void btnOK_Click(object sender, EventArgs e)
        {
           
           
           
           
            if (!IsSubmit)
            {

              string employeeId = HjEmployee1.EmployeeId; //员工号
                string employeeName = HjEmployee1.EmployeeName;  //员工姓名
                int getNum = int.Parse(txtGetNum.Text);  //件数
                decimal getWeight = decimal.Parse(txtgetweight.Text); //领料重量
                string vatname = txtVatName.Text.Trim();
                if (vatname == string.Empty)
                {
                    MessageObject.ShowJS(this, "请添加缸号!");
                    return;
                }

                if (getWeight == 0)
                {
                    MessageObject.ShowJS(this, "领料重量不能为零");
                    return;
                }
                if ((getNum + HjGetNum) > PlanNum)  //如果领取数量大于计划数
                {
                    MessageObject.ShowJS(this, "领取件数大于计划数,还有 " + (PlanNum - HjGetNum) + "  件未领! ");
                    return;
                }


                MZS.Model.hjio model = new MZS.Model.hjio();    //定义横机领料实体
                model.getdate = DateTime.Parse(txtindate.Text);
                model.workid = employeeId;
                model.workname = employeeName;


                model.VatName = vatname;
                model.Comment = txtcomment.Text.Trim();
                model.scheduleid = ScheduleId;
                model.GetNum = getNum;

         

                model.hjstatus = "2";
                model.getweight = getWeight;

              MZS.BLL.hjioBLL bll = new MZS.BLL.hjioBLL();
              IsSubmit = true; //设为提交
                int hjid = bll.HjGet(model); 
                if (hjid != 0)
                {
                    AddFuLiaoInfo(hjid);
                }
              Response.Redirect("hengji_io.aspx");
            }
        }

    大家请看代码,这样还是会重复提交,真是怪了!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 14:30:019楼 得分:1
    友情帮顶
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 14:32:1410楼 得分:1
    关注,很少察觉这种问题!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 15:22:2011楼 得分:1
    帮顶
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 15:29:5812楼 得分:1
    遇到过 帮顶
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 15:45:1413楼 得分:1
    我实在也看不出来。问题出在哪。
    帮顶一下!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 15:47:2114楼 得分:1
    ViewState绝对 行
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 15:48:2615楼 得分:20
    C# code
    之前修改公司项目的一个问题,就是刷新页面表单重新提交了错误数据。在网上也查了一些资料,最简单的就 提交完以后将页面导到别的页面,或者就是将按钮禁用。最终问题我没有解决,但是在我在CSDN上看到另外一篇博客,介绍了如何用委托来防止页面刷新提交的问题,具体是那个博客我不记得了,博客上面提供的代码并不能正确运行,我修改了一下,可以正确运行了。这个思路比较适合那种只需要提交一次的场合。下面吧代码贴出来,大家可以提出更好的解决办法。 private static bool SubmitState = false; protected void Page_Load(object sender, EventArgs e) ...{ //判断页面是否初始化以及提交的状态 if (IsPostBack && SubmitState) ...{ //从委托队列中删除原始事件 this.Button1.Click -= new EventHandler(Button1_Click); this.Button1.Click += new EventHandler(kenButton1_Click); } } //重复提交事件 private void kenButton1_Click(object sender, EventArgs e) ...{ Response.Write("请不要重复提交,或者刷新"); } //提交 protected void Button1_Click(object sender, EventArgs e) ...{ Response.Write("提交成功"); SubmitState = true; this.Button1.Click -= new EventHandler(Button1_Click); this.Button1.Click += new EventHandler(kenButton1_Click); }

    这个是我写的博客里的一篇文章
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 15:52:2016楼 得分:1
    顶者有分。。。
    困死我了。。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lizh0103
    • 等级:
    发表于:2008-07-18 15:56:5517楼 得分:0
    引用 14 楼 nfnxg123456 的回复:
    ViewState绝对 行



    我在调试的时候,按钮连着按钮几下,IsSubmit 一直都是 false,不知道什么原因,
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 15:58:1118楼 得分:1
    帮顶

    另 add里面是怎么写的?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 16:00:3719楼 得分:1
    JScript code
    OnClientClick="this.disabled=true;setTimeout('window.form.submit()',0);"

    将页面的提交做异步处理。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 16:06:0620楼 得分:1
    提交过程中加一个层,禁止页面操作
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bollton
    • 等级:
    发表于:2008-07-18 16:10:1621楼 得分:1
    Response.Redirect("hengji_io.aspx");
    改成btnOK.Enabled = false;
    试试
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 16:14:1022楼 得分:1
    个人认为还是ADD方法有问题。你要进行跳转的代码,也要写在ADD方法里啊。你别说你在这个方法之外啊。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lizh0103
    • 等级:
    发表于:2008-07-18 16:14:1623楼 得分:0
    请高手解释一下,为什么回车连这多按几下,执行click中 事件的的Add 方法,并不会 执行下面的跳转语句,而是继续重复 执行 Add方法,大家可以试验一下,也请高手解释原因???
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lizh0103
    • 等级:
    发表于:2008-07-18 16:16:3824楼 得分:0
    引用 22 楼 chenguang79 的回复:
    个人认为还是ADD方法有问题。你要进行跳转的代码,也要写在ADD方法里啊。你别说你在这个方法之外啊。


    这个Add 方法只是一个简单,说明有一个添加操作而已,具体是 调用 逻辑层的Add 方法的,
    还想问你写在方法之外有区别吗??Add 执行完了 就继续执行后面的语句啊 ???
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • aaajedll
    • 等级:
    发表于:2008-07-18 16:19:0325楼 得分:1
    引用 11 楼 chinawes 的回复:
    帮顶
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 16:20:0426楼 得分:1
    有钱出钱,有力出力。小弟只能帮顶了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Ronio
    • 等级:
    发表于:2008-07-18 16:21:0827楼 得分:1
    引用 17 楼 lizh0103 的回复:
    引用 14 楼 nfnxg123456 的回复:
    ViewState绝对 行



    我在调试的时候,按钮连着按钮几下,IsSubmit 一直都是 false,不知道什么原因,


    你的IsSubmit在
    if(!IsSubmit){
        IsSubmit=true;  //这个是不是有写吗?我好像没有看到啊?
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 16:24:0128楼 得分:1
    我来学习的,只能帮你顶一下了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lizh0103
    • 等级:
    发表于:2008-07-18 19:05:0829楼 得分:0
    引用 6 楼 silentwins 的回复:
    在页面设置个bool型的ViewState变量,默认为false

    btnOK里面判断改值是否为false,如果为false继续执行,如果为true则跳出,
    在Add()前面加一行设置该变量为true的代码


    用viewstate 不行,我新增一个页面测试也不行代码如下:
    C# code
    private bool SubmitState { get { return ViewState["a"] == null ? false : (bool)ViewState["a"]; } set { ViewState["a"] = value; } } protected void Page_Load(object sender, EventArgs e) { } protected void Button1_Click(object sender, EventArgs e) { if (!SubmitState) { SubmitState = true; AddTest(); Response.Redirect("default2.aspx"); } } private void AddTest() { string sql = "insert into test(name) values('aa')"; DbHelperSQL.ExecuteSql(sql); }

    当焦点在button上时,我连着敲回车几下,就插入两条重复数据了
    数据库信息如下:
    id name adddate
    7 aa  2008-07-18 19:00:08
    8 aa  2008-07-18 19:00:44
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lizh0103
    • 等级:
    发表于:2008-07-18 21:37:1130楼 得分:0
    在顶
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 21:59:4331楼 得分:1
    学习学习
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 22:05:2932楼 得分:1
    你的form里面是不是也有提交函数??
    若有的话,在FORM里面也提交了,
    既然是重复提交了,你把按钮的js代码去掉一点,改成如下:
    OnClientClick="this.disabled=true;" UseSubmitBehavior="False"
    去掉this.form.submit();这个。我以前遇到过这个问题。就是在form里面也有一个check各控件的值,CHECK完后,也有一个submit()动作,所以重复提交了两次。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友