我正在尝试在表单提交期间禁用该按钮,但无法执行此操作。这是javascript代码
<script type="text/javascript">
function Validate(b)
{
function stuff()
{
var temp = document.getElementById("<%=txt_stuff.ClientID %>").value;
var val = /^[a-zA-Z0-9 ]+$/
if(temp=="")
{
alert("Please Enter Stuff");
return false;
}
else if(val.test(temp))
{
return true;
}
else
{
alert("Name accepts only spaces and charcters");
return false;
}
}
function price()
{
var temp2 = document.getElementById("<%=txt_price.ClientID %>").value;
var val2 = /^[0-9 ]+$/
if(temp2=="")
{
alert("Please Enter Price");
return false;
}
else if(val2.test(temp2))
{
return true;
}
else
{
alert("Price accepts only Number");
return false;
}
}
if(stuff() && price())
{
b.disabled = true;
b.value = 'Submitting...';
return true;
}
else
{
return false;
}
}
</script>
Here is the button code
<asp:Button ID="Button2" runat="server" Text="Add Record" OnClientClick = "return Validate(this)"
onclick="Button2_Click" />
该按钮被禁用但该值未提交到数据库中。
数据库更新代码
protected void Button2_Click(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(500);
SqlConnection con = new SqlConnection();
con.ConnectionString = "Data Source=DTPXP-77A;Initial Catalog=practice;Integrated Security=true";
con.Open();
SqlCommand cmd = new SqlCommand("insert into expense values(@person,@item,@expdate,@price)", con);
cmd.Parameters.Add("@person", SqlDbType.VarChar);
cmd.Parameters.Add("@item", SqlDbType.VarChar);
cmd.Parameters.Add("@expdate", SqlDbType.DateTime);
cmd.Parameters.Add("@price", SqlDbType.Int);
cmd.Parameters["@person"].Value = droplist_person.SelectedItem.ToString();
cmd.Parameters["@item"].Value = txt_stuff.Text;
cmd.Parameters["@expdate"].Value = DateTime.Now.ToString();
cmd.Parameters["@price"].Value = txt_price.Text;
cmd.ExecuteNonQuery();
InsertHistory();
Response.Redirect("Add.aspx");
}
答案 0 :(得分:1)
删除UseSubmitBehavior =&#34; false&#34;属性? 并且您不需要在javascript中返回anithing(返回false用于取消回发)
答案 1 :(得分:0)
我认为这是您将项目插入数据库的方式,因为您说它禁用了按钮但没有插入数据库。所以对我来说,这意味着事件正在解雇,但插入方式有问题。这是我的按钮看起来的样子,使用你的代码..
protected void Button2_Click(object sender, EventArgs e)
{
string person = droplist_person.SelectedItem.Text;
string item = txt_stuff.Text;
string expdate = DateTime.Now.ToString();
string price = txt_price.Text;
System.Threading.Thread.Sleep(500);
SqlConnection con = new SqlConnection("Data Source=DTPXP-77A;Initial Catalog=practice;Integrated Security=true");
con.Open();
SqlCommand cmd = new SqlCommand("INSERT INTO (expense person, item, expdate, price) VALUES (@person, @item, @expdate, @price)", con);
cmd.Parameters.AddWithValue("@person", person);
cmd.Parameters.AddWithValue("@item", item);
cmd.Parameters.AddWithValue("@expdate", expdate);
cmd.Parameters.AddWithValue("@price", price);
cmd.ExecuteNonQuery();
InsertHistory();
Response.Redirect("Add.aspx");
Button2.Enabled = false; //you can disable the button one the button click as well.
Page.ClientScript.RegisterStartupScript(this.GetType(), "Call my function", "mess();", true);
}
我也会在try / catch中包围它。另外,据我所知,Add是将项目插入数据库的“旧”方式。 AddWithValue将是您从下拉列表和文本框中插入项目的最佳方式。我认为这就是问题所在。您也可以将连接放在SqlConnection内部的连接中,如上所述“清理”一些东西。关于你的“第二”问题,我不完全确定你的意思,但我希望这能解决你的第一个问题。
编辑:添加了按钮的禁用,因为它已在标题中描述。
编辑2:此外,删除UseSubmitBehavior =“false”和OnClientClick。相反,您可以在后面的代码中调用该消息。例如,请查看上面的内容。
编辑3:根据我的理解,您将希望保留代码插入值的内容。所以保持OnClientClick =“return Validate();”然后在按钮单击中,禁用按钮。然后你会想要添加if(!PostBack)到页面加载,就像这样..如果回发发生,这将启用页面加载按钮。那么将要发生的是你禁用按钮,然后一旦它回发,它将被重新启用。
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
Button2.Enabled = true;
}
}