单击 ASP.NET 中的按钮时如何防止回发

How to prevent PostBack while clicking button in ASP.NET

以下picture是我在项目中的一个WebForms的视图。我目前面临以下问题:我正在加载 CSV 文件,程序对其进行分析并将其显示为 Table。然后,使用下面的 DropDownLists 和文本框,用户选择日期、项目和小时数以减少已分配给项目的小时数(假设项目 x,预算为 100.000 美元,有 150 小时供工人使用。每个工人燃烧他自己的时间,网络管理员可以看到可以燃烧多少小时以及预算如何)。当我减少某天的小时数时,例如项目 x,星期一,8h- 页面重新加载和所有内容,包括 table,下拉列表和文本框关闭,用户将项目小时数添加到另一天。

请查看负责数据库更改并在单击“提交”按钮期间执行的代码:

private void decreaseProjHours()
{
        if (IsPostBack)
        {

            string nameOfProject = DropDownList1.SelectedValue;
            int dayID = DropDownList2.SelectedIndex;
            int hours = Convert.ToInt32(TextBox3.Text);

            if ((nameOfProject == "") || (dayID > 7 || dayID < 0) || hours < 0)
            {
                Response.Write("You have entered invalid data in one of the fields!");
                return;
            }
            //decreasing from total hours assigned to project
            SqlConnection conn = new    SqlConnection(ConfigurationManager.ConnectionStrings["WorkTimeDBConnectionString"].ConnectionString);
            conn.Open();
            string getTotalProjectH = "select hours from projects where project_name='" + nameOfProject + "'";
            SqlCommand com = new SqlCommand(getTotalProjectH, conn);

            int check = Convert.ToInt32(com.ExecuteScalar().ToString());

            if (check - hours < 0)
            {
                Response.Write("No more hours can be reported for project" + nameOfProject);
                conn.Close();
                return;
            }
            else
            {
                try
                {
                    string tryUpdate = "update projects set hours='" + (check - hours) + "'" + " where project_name='" + nameOfProject + "'";
                    SqlCommand com1 = new SqlCommand(tryUpdate, conn);

                    com1.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    Response.Write(ex.ToString());
                    conn.Close();
                    return;
                }
            }
        }
    }  

PostBack 有问题吗?我已经尝试将 OnClientClick return 设置为 false 并且 Button3.Attributes.Add("onclick", "return false;")- 修改数据库的操作失败并且没有提交任何内容。

我该怎么办? PostBack 真的有问题还是刷新我的网页?

编辑:

Button3.Attributes.Add("onclick", "return false;");
Button3.OnClientClick = "decreaseProjHours(); return false;";
Button3.UseSubmitBehavior = false;

提前致谢, 科科斯

行中的代码或多或少是正确的

Button3.OnClientClick = "decreaseProjHours(); return false;";

然而,问题是它寻找 javascript 函数 decreaseProjHours(),我假设您没有,因为您在服务器端的代码后面有该方法。 OnClientClick 根据定义是客户端处理程序,因此需要在客户端定义该方法。由于找不到 javascript 函数,因此无法执行下一行 return false;

如果您需要先执行该代码然后执行 return false 以防止回发,则需要将代码放在 javascript 函数中而不是代码隐藏中。然后,如果您愿意,您可以将该功能设置为 return true 或 false,而不是在 OnClientClick 定义中添加额外的 return 语句。

请注意,如果您还定义了服务器端点击处理程序,则在没有回发的情况下不会执行;即服务器端 OnClick 处理程序仅在客户端 return 为真时执行。