读书人

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

发布时间: 2013-12-28 22:19:34 作者: rapoo

大神们,一个关于按钮键的问题,请指教!
问题是这样的,有个“保存”按钮,现在会出现这样的情况就是如果点击快速的话(实际应用卡),会出现保存多次数据的情况,虽然函数有个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

读书人网 >C#

热点推荐