如何在ASP.NET中单击按钮时阻止PostBack

时间:2015-12-14 12:25:54

标签: asp.net callback postback

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

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

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返回false和Button3.Attributes.Add(“onclick”,“return false;”) - 修改数据库的操作失败,然后没有提交任何内容。

我该怎么办? PostBack或其他东西刷新我的网页真的有问题吗?

编辑:

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

提前致谢, KOKOS

1 个答案:

答案 0 :(得分:1)

您在

行中或多或少有正确的代码
Button3.OnClientClick = "decreaseProjHours(); return false;";

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

如果您需要首先执行该代码然后返回false以防止回发,则需要将代码放在javascript函数中而不是代码隐藏中。然后,如果您愿意,可以使该函数返回true或false,而不是在OnClientClick定义中使用其他return语句。

请注意,如果您还定义了服务器端点击处理程序,则如果没有回发,则不会执行此操作;即服务器端OnClick处理程序仅在客户端返回true时执行。