单击 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 为真时执行。
以下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 为真时执行。