1

我试图在表单提交期间禁用该按钮,但无法这样做。这是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");

        }
4

2 回答 2

1

删除 UseSubmitBehavior="false" 属性?并且您不需要在 javascript 中返回 anithing(返回 false 用于取消回发)

于 2013-10-08T12:26:23.147 回答
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;
     }
}
于 2013-10-08T12:41:23.053 回答