以下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
答案 0 :(得分:1)
您在
行中或多或少有正确的代码Button3.OnClientClick = "decreaseProjHours(); return false;";
然而问题是它寻找一个javascript函数decreaseProjHours()
,我假设你没有,因为你的代码背后的服务器端有这种方法。根据定义,OnClientClick
是客户端处理程序,因此需要在客户端定义该方法。由于找不到javascript函数,因此无法执行下一行return false;
。
如果您需要首先执行该代码然后返回false以防止回发,则需要将代码放在javascript函数中而不是代码隐藏中。然后,如果您愿意,可以使该函数返回true或false,而不是在OnClientClick
定义中使用其他return语句。
请注意,如果您还定义了服务器端点击处理程序,则如果没有回发,则不会执行此操作;即服务器端OnClick
处理程序仅在客户端返回true时执行。