首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

大神们,一个关于按钮键的有关问题,

2013-12-28 
大神们,一个关于按钮键的问题,请指教!问题是这样的,有个“保存”按钮,现在会出现这样的情况就是如果点击快速

大神们,一个关于按钮键的问题,请指教!
问题是这样的,有个“保存”按钮,现在会出现这样的情况就是如果点击快速的话(实际应用卡),会出现保存多次数据的情况,虽然函数有个CertRight()判断函数,但是也会出现这种情况,因为可能第一次插入语句没有执行完,第二次又点击了按钮,请问大神们怎么解决这个问题,值插入一次数据!请指教!
下面是代码:


protected void Button12_Click(object sender, EventArgs e)
    {
       
        //if (IsClick == true)
        //{
        //    new SysClass().alert(this.Page, "不能重复提交申请!");
        //}
        //else
        //{
            
            if (this.TextBox1.Text.Trim() != "")
            {
                if (this.CertRight(this.TextBox1.Text.Trim()))//判断合格证
                {
                    string alertError = "";
                    if (this.XZHgzCount(out alertError))
                    {
                        ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);    
                        ArrayList sQLs = new ArrayList();
                        ArrayList sqlParams = new ArrayList();
                        SysClass class2 = new SysClass();
                        DBClass class3 = new DBClass("ConnStr");
                        string[] userInfo = class2.GetUserInfo();
                        string str2 = "Insert Into Cert (Cert,CertNo,VehicleOwnerName,LicenceNo,LicenceColor,YingYunNo,AutoTypeName,EngineNo,UnderpanNo,FixTypeName,DriveDistance,FreeDistance,FreeDays,FixStartDate,FixEndDate,State,FixInfo,Organ,CreateOrgan,CreateName,CreateDate,CertEnrol) values (@Cert,@CertNo,@VehicleOwnerName,@LicenceNo,@LicenceColor,@YingYunNo,@AutoTypeName,@EngineNo,@UnderpanNo,@FixTypeName,@DriveDistance,@FreeDistance,@FreeDays,@FixStartDate,@FixEndDate,@State,@FixInfo,@Organ,@CreateOrgan,@CreateName,@CreateDate,@CertEnrol)";
                        log.Info("打印合格证,向Cert表中添加数据!");
                        SqlParameter[] parameterArray = new SqlParameter[] { 
                        new SqlParameter("@Cert", SqlDbType.VarChar, 50), 
                        new SqlParameter("@CertNo", SqlDbType.VarChar, 20), 
                        new SqlParameter("@VehicleOwnerName", SqlDbType.VarChar, 100), 
                        new SqlParameter("@LicenceNo", SqlDbType.VarChar, 20), 
                        new SqlParameter("@LicenceColor", SqlDbType.VarChar, 20), 
                        new SqlParameter("@YingYunNo", SqlDbType.VarChar, 20), 
                        new SqlParameter("@AutoTypeName", SqlDbType.VarChar, 50), 
                        new SqlParameter("@EngineNo", SqlDbType.VarChar, 20), 
                        new SqlParameter("@UnderpanNo", SqlDbType.VarChar, 20), 


                        new SqlParameter("@FixTypeName", SqlDbType.VarChar, 100), 
                        new SqlParameter("@DriveDistance", SqlDbType.Int), 
                        new SqlParameter("@FreeDistance", SqlDbType.Int), 
                        new SqlParameter("@FreeDays", SqlDbType.Int), 
                        new SqlParameter("@FixStartDate", SqlDbType.DateTime), 
                        new SqlParameter("@FixEndDate", SqlDbType.DateTime), 
                        new SqlParameter("@State", SqlDbType.SmallInt), 
                        new SqlParameter("@FixInfo", SqlDbType.VarChar, 50), 
                        new SqlParameter("@Organ", SqlDbType.VarChar, 50), 
                        new SqlParameter("@CreateOrgan", SqlDbType.VarChar, 50), 
                        new SqlParameter("@CreateName", SqlDbType.VarChar, 30), 
                        new SqlParameter("@CreateDate", SqlDbType.DateTime), 
                        new SqlParameter("@CertEnrol", SqlDbType.Float)
                     };
                        parameterArray[0].Value = new UseClass().GetNo();
                        parameterArray[1].Value = this.TextBox1.Text.Trim();
                        parameterArray[2].Value = this.Label3.Text.Trim();
                        parameterArray[3].Value = this.Label5.Text.Trim();
                        parameterArray[4].Value = this.ViewState["LicenceColor"].ToString();
                        parameterArray[5].Value = this.ViewState["YingYunNo"].ToString();
                        parameterArray[6].Value = this.Label7.Text.Trim();
                        parameterArray[7].Value = this.Label11.Text.Trim();
                        parameterArray[8].Value = this.Label9.Text.Trim();
                        parameterArray[9].Value = this.ViewState["FixType"].ToString().Trim();
                        if (this.Label17.Text.Trim() == "")
                        {
                            parameterArray[10].Value = DBNull.Value;
                        }
                        else
                        {


                            parameterArray[10].Value = this.Label17.Text.Trim();
                        }
                        parameterArray[11].Value = this.Label19.Text.Trim();
                        parameterArray[12].Value = this.Label20.Text.Trim();
                        parameterArray[13].Value = this.Label23.Text.Trim();
                        if (this.Label1.Text.ToString().Trim() == "")
                        {
                            parameterArray[14].Value = DBNull.Value;
                        }
                        else
                        {
                            parameterArray[14].Value = this.Label1.Text.Trim();
                        }
                        parameterArray[15].Value = 60;
                        parameterArray[0x10].Value = this.ViewState["FixInfo"].ToString();
                        parameterArray[0x11].Value = this.ViewState["Organ"].ToString();
                        parameterArray[0x12].Value = this.ViewState["Organ"].ToString();
                        parameterArray[0x13].Value = userInfo[0].ToString();
                        parameterArray[20].Value = this.GetServerDate();
                        parameterArray[0x15].Value = this.DropDownList1.SelectedValue.Trim();
                        sQLs.Add(str2);
                        sqlParams.Add(parameterArray);
                        string str3 = "update FixInfo set state=@state where FixInfo=@FixInfo and Organ=@Organ";
                        SqlParameter[] parameterArray2 = new SqlParameter[] 
                        { 
                            new SqlParameter("@state", SqlDbType.Int), 
                            new SqlParameter("@FixInfo", SqlDbType.Decimal), 
                            new SqlParameter("@Organ", SqlDbType.VarChar, 50) 
                        };
                        if ((this.ViewState["state"].ToString().Trim() == "20") || (this.ViewState["state"].ToString().Trim() == "10"))


                        {
                            parameterArray2[0].Value = 30;
                        }
                        else
                        {
                            parameterArray2[0].Value = 40;
                        }
                        parameterArray2[1].Value = this.ViewState["FixInfo"].ToString();
                        parameterArray2[2].Value = this.ViewState["Organ"].ToString();
                        log.Info("打印合格证,更新FixInfo表,update FixInfo set state=" + parameterArray2[0].Value + " where FixInfo=" + parameterArray2[1].Value + " and Organ=" + parameterArray2[2].Value);
                        sQLs.Add(str3);
                        sqlParams.Add(parameterArray2);
                        string str4 = "update CertEnrol set RemainderCertNum=RemainderCertNum-1 , CurrentCertNo=@CurrentCertNo   where CertEnrol=@CertEnrol";
                        SqlParameter[] parameterArray3 = new SqlParameter[] { new SqlParameter("@CurrentCertNo", SqlDbType.VarChar, 20), new SqlParameter("@CertEnrol", SqlDbType.Float) };
                        string str5 = Convert.ToString((Convert.ToDecimal(this.TextBox1.Text)) + 1);
                        int length = str5.Length;
                        for (int i = 1; i <= (this.TextBox1.Text.Length - length); i++)
                        {
                            str5 = "0" + str5;
                        }
                        parameterArray3[0].Value = str5;
                        parameterArray3[1].Value = this.DropDownList1.SelectedValue.Trim();
                        log.Info("打印合格证,更新CertEnrol表,update CertEnrol set RemainderCertNum=RemainderCertNum-1 , CurrentCertNo=" + parameterArray3[0].Value + "   where CertEnrol=" + parameterArray3[1].Value);
                        sQLs.Add(str4);
                        sqlParams.Add(parameterArray3);
                        //IsClick = true;
                        if (class3.ExecSQL(sQLs, sqlParams))
                        {
                            //this.Button7.mouse


                            //this.Button12.Enabled = false;
                            base.Response.Redirect("../Frame/PrintCert.aspx?FixOrgan=" + this.ViewState["FixOrgan"].ToString());
                            this.TextBox1.Enabled = false;
                            this.DropDownList1.Enabled = false;
                            this.Button7.Enabled = true;
                            this.Button12.Enabled = false;
                           
                        }
                        else
                        {
                            class2.alert(this.Page, "保存失败");
                        }
                    }
                    else
                    {
                        new SysClass().alert(this.Page, alertError);
                    }
                }
            }
            else
            {
                new SysClass().alert(this.Page, "请选择合格证批次号!");
            }
            //return IsClick;
        //}

    }


[解决办法]
引用:
Quote: 引用:

Quote: 引用:

不可以 给个全局标识? 点一下为true  再点击就判断这个标识 如果是ture就不保存数据了 直接跳出

不可以的,如果是用静态的,点击后设置为true,那么在下次插入其他汽车信息的时候就无法插入数据了!试过了,还是谢谢你

忘说了  事件执行结束 请给标识 赋值为false  不要一直为ture


页面,如果多个人操作呢?

今天回家,在车上想了一个比较优雅的方法:

1. 可以在asp:button上加一个OnClientClick="return confirm('确定执行操作?');"
这个在第一次点击的时候就会弹出一个框让用户确认,这样就不会有连续点击的问题了

2. 如果需求不允许1的话,OnClientClick="return functionA();"
functionA js函数(自己写吧),把时间控制交给浏览器,如果少于某个时间段提交的话,就返回false

热点排行