为什么在取消选中asp.net中的复选框时不会触发checkchanged事件

显示用户主题的出勤跟踪器应用程序的一部分,并让他标记自己的出勤率。 如果使用enableviewstate =“true”,则复选框donot将被取消选中,并且checkchanged事件不会执行。 请通过代码并告诉我错误。解决方案。

名称空间门户

{

public partial class tracker : System.Web.UI.Page { String[] split; string day; protected void Page_Load(object sender, EventArgs e) { /* if (Session["uname"] == null) { Response.Redirect("Firstpage.aspx"); }*/ String[] split = new String[16]; DateTime d1 = DateTime.Today; string month = d1.ToString("MMMM"); Lblmonth.Text = month; String userid = Session["uname"].ToString(); SqlConnection con2 = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=F:\mmm\portal\App_Data\student.mdf;Integrated Security=True;User Instance=True"); SqlCommand cmd2 = new SqlCommand("select sbranch ,syear from studdetails where userid=@userid ", con2); cmd2.Parameters.AddWithValue("userid", userid); String branch = "", year = ""; SqlDataReader rdr2 = null; con2.Open(); rdr2 = cmd2.ExecuteReader(); while (rdr2.Read()) { branch = rdr2["sbranch"].ToString(); year = rdr2["syear"].ToString(); } con2.Close(); int sem = 0; switch (year) { case "BE": sem = 8; break; case "TE": sem = 6; break; case "SE": sem = 4; break; case "FE": sem = 2; break; default: sem = 2; break; } int tempmonth = (int)(d1.Month); if (tempmonth > 6) sem = sem - 1; SqlConnection con3 = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=F:\mmm\portal\App_Data\student.mdf;Integrated Security=True;User Instance=True"); SqlCommand cmd3 = new SqlCommand("select subject from subjecttable where department=@dept and semester=@sem ", con3); cmd3.Parameters.AddWithValue("dept", branch); cmd3.Parameters.AddWithValue("sem", sem); con3.Open(); SqlDataReader rdr3 = null; rdr3 = cmd3.ExecuteReader(); string subject = ""; while (rdr3.Read()) { subject = rdr3["subject"].ToString(); } con3.Close(); Char[] separator = new Char[] { ',' }; String[] subsplit = subject.Split(separator); int size = subsplit.Length; switch (size) { case 6: subj6.Text = subsplit[5]; goto case 5; case 5: subj5.Text = subsplit[4]; goto case 4; case 4: subj4.Text = subsplit[3]; goto case 3; case 3: subj3.Text = subsplit[2]; goto case 2; case 2: subj2.Text = subsplit[1]; goto case 1; case 1: subj1.Text = subsplit[0]; break; ; } } protected void Calendar1_DayRender(object sender, DayRenderEventArgs e) { if (e.Day.IsWeekend) { e.Cell.BackColor = System.Drawing.Color.DarkBlue; } else { e.Cell.BackColor = System.Drawing.Color.LightBlue; } SelectedDatesCollection dates = Calendar1.SelectedDates; DateTime toDay = DateTime.Today; string days = toDay.ToLongDateString(); Labelday.Text = days; Char[] separator = new Char[] { ',' }; String[] split1 = days.Split(separator); day = split1[0]; Session["day"] = Calendar1.SelectedDate.ToShortDateString(); if (dates.Count > 0) { Labelday.Text = dates[0].ToLongDateString() + "
"; String temp = Labelday.Text; split1 = temp.Split(separator); day = split1[0]; } if (!(day.Equals("Saturday") || day.Equals("Sunday"))) { SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=F:\mmm\portal\App_Data\student.mdf;Integrated Security=True;User Instance=True"); string cla = Convert.ToString(Session["uclass"]); SqlCommand cmd = new SqlCommand("select " + day + " from studtimetable where class = @class ", con); con.Open(); cmd.Parameters.AddWithValue("class", cla); SqlDataReader rdr = null; String tt = ""; rdr = cmd.ExecuteReader(); while (rdr.Read()) { tt = rdr[day].ToString(); } con.Close(); split = tt.Split(separator); int size = split.Length; lbltime.Visible = true; Lblsubj.Visible = true; Lblatt.Visible = true; switch (size) { case 16: Label15.Text = split[15]; Session["l15"] = Label15.Text; Label14.Text = split[14]; CheckBox8.Visible = true; goto case 14; case 14: Label13.Text = split[13]; Session["l13"] = Label13.Text; Label12.Text = split[12]; CheckBox7.Visible = true; goto case 12; case 12: Label11.Text = split[11]; Session["l11"] = Label11.Text; Label10.Text = split[10]; CheckBox6.Visible = true; goto case 10; case 10: Label9.Text = split[9]; Session["l9"] = Label9.Text; Label8.Text = split[8]; CheckBox5.Visible = true; goto case 8; case 8: Label7.Text = split[7]; Session["l7"] = Label7.Text; Label6.Text = split[6]; CheckBox4.Visible = true; goto case 6; case 6: Label5.Text = split[5]; Session["l5"] = Label5.Text; Label4.Text = split[4]; CheckBox3.Visible = true; goto case 4; case 4: Label3.Text = split[3]; Session["l3"] = Label3.Text; Label2.Text = split[2]; CheckBox2.Visible = true; goto case 2; case 2: Label1.Text = split[1]; Session["l1"] = Label1.Text; Label0.Text = split[0]; CheckBox1.Visible = true; break; } } else { lbltime.Text = "Enjoy weekend"; lbltime.Visible = true; } } protected void Calendar1_SelectionChanged(object sender, EventArgs e) { CheckBox1.Checked = false; CheckBox2.Checked = false; CheckBox3.Checked = false; CheckBox4.Checked = false; CheckBox5.Checked = false; CheckBox6.Checked = false; CheckBox7.Checked = false; CheckBox8.Checked = false; } protected void CheckBox1_CheckedChanged(object sender, EventArgs e) { if (CheckBox1.Checked == true) { string sub = Session["l1"].ToString(); string userid = Session["uname"].ToString(); string date = Session["day"].ToString(); string tempclass = Session["uclass"].ToString(); SqlConnection con4 = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=F:\mmm\portal\App_Data\student.mdf;Integrated Security=True;User Instance=True"); SqlCommand cmd4 = new SqlCommand("insert into " + tempclass + "track values ('" + userid + "','" + sub + "','" + date + "')", con4); con4.Open(); cmd4.ExecuteNonQuery(); con4.Close(); } else { Label18.Text = "uncheck";//temporary to check if this block executes } } protected void CheckBox2_CheckedChanged(object sender, EventArgs e) { if (CheckBox2.Checked == true) { string sub = Session["l3"].ToString(); string userid = Session["uname"].ToString(); string date = Session["day"].ToString(); string tempclass = Session["uclass"].ToString(); SqlConnection con4 = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=F:\mmm\portal\App_Data\student.mdf;Integrated Security=True;User Instance=True"); SqlCommand cmd4 = new SqlCommand("insert into " + tempclass + "track values ('" + userid + "','" + sub + "','" + date + "')", con4); con4.Open(); cmd4.ExecuteNonQuery(); con4.Close(); //Response.Redirect("tracker.aspx"); } else { } } protected void CheckBox3_CheckedChanged(object sender, EventArgs e) { if (CheckBox3.Checked == true) { string sub = Session["l5"].ToString(); string userid = Session["uname"].ToString(); string date = Session["day"].ToString(); string tempclass = Session["uclass"].ToString(); SqlConnection con4 = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=F:\mmm\portal\App_Data\student.mdf;Integrated Security=True;User Instance=True"); SqlCommand cmd4 = new SqlCommand("insert into " + tempclass + "track values ('" + userid + "','" + sub + "','" + date + "')", con4); con4.Open(); cmd4.ExecuteNonQuery(); con4.Close(); //Response.Redirect("tracker.aspx"); } else { } } protected void CheckBox4_CheckedChanged(object sender, EventArgs e) { if (CheckBox4.Checked == true) { string sub = Session["l7"].ToString(); string userid = Session["uname"].ToString(); string date = Session["day"].ToString(); string tempclass = Session["uclass"].ToString(); SqlConnection con4 = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=F:\mmm\portal\App_Data\student.mdf;Integrated Security=True;User Instance=True"); SqlCommand cmd4 = new SqlCommand("insert into " + tempclass + "track values ('" + userid + "','" + sub + "','" + date + "')", con4); con4.Open(); cmd4.ExecuteNonQuery(); con4.Close(); //Response.Redirect("tracker.aspx"); } else { } } protected void CheckBox5_CheckedChanged(object sender, EventArgs e) { if (CheckBox5.Checked == true) { string sub = Session["l9"].ToString(); string userid = Session["uname"].ToString(); string date = Session["day"].ToString(); string tempclass = Session["uclass"].ToString(); SqlConnection con4 = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=F:\mmm\portal\App_Data\student.mdf;Integrated Security=True;User Instance=True"); SqlCommand cmd4 = new SqlCommand("insert into " + tempclass + "track values ('" + userid + "','" + sub + "','" + date + "')", con4); con4.Open(); cmd4.ExecuteNonQuery(); con4.Close(); //Response.Redirect("tracker.aspx"); } else { } } protected void CheckBox6_CheckedChanged(object sender, EventArgs e) { if (CheckBox6.Checked == true) { string sub = Session["l11"].ToString(); string userid = Session["uname"].ToString(); string date = Session["day"].ToString(); string tempclass = Session["uclass"].ToString(); SqlConnection con4 = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=F:\mmm\portal\App_Data\student.mdf;Integrated Security=True;User Instance=True"); SqlCommand cmd4 = new SqlCommand("insert into " + tempclass + "track values ('" + userid + "','" + sub + "','" + date + "')", con4); con4.Open(); cmd4.ExecuteNonQuery(); con4.Close(); //Response.Redirect("tracker.aspx"); } else { } } protected void CheckBox7_CheckedChanged(object sender, EventArgs e) { if (CheckBox7.Checked == true) { string sub = Session["l13"].ToString(); string userid = Session["uname"].ToString(); string date = Session["day"].ToString(); string tempclass = Session["uclass"].ToString(); SqlConnection con4 = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=F:\mmm\portal\App_Data\student.mdf;Integrated Security=True;User Instance=True"); SqlCommand cmd4 = new SqlCommand("insert into " + tempclass + "track values ('" + userid + "','" + sub + "','" + date + "')", con4); con4.Open(); cmd4.ExecuteNonQuery(); con4.Close(); //Response.Redirect("tracker.aspx"); } else { } } protected void CheckBox8_CheckedChanged(object sender, EventArgs e) { if (CheckBox8.Checked == true) { string sub = Session["l15"].ToString(); string userid = Session["uname"].ToString(); string date = Session["day"].ToString(); string tempclass = Session["uclass"].ToString(); SqlConnection con4 = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=F:\mmm\portal\App_Data\student.mdf;Integrated Security=True;User Instance=True"); SqlCommand cmd4 = new SqlCommand("insert into " + tempclass + "track values ('" + userid + "','" + sub + "','" + date + "')", con4); con4.Open(); cmd4.ExecuteNonQuery(); con4.Close(); //Response.Redirect("tracker.aspx"); } else { } } }

}

从MSDN( http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.checkbox.oncheckedchanged.aspx ):

CheckBox控件必须在发布到服务器的post之间保留一些值才能使此事件正常工作。 确保为此控件启用了视图状态。

如果未选中(html)复选框并提交表单,则不会将任何值传递回服务器,这就是您需要为此控件启用ViewState的原因,因此ASP.NET将跟踪状态(已选中/未选中)。

删除EnableViewState =“false”,它应该可以正常工作

谢谢大家的考虑。 问题终于解决了。 在用户取消选中事件时,checkchanged方法没有执行,因为1)启用了autopostback,取消选中导致执行的page_load方法,这反过来导致checkbox.visible = false,因此checkchanged没有执行,然后日历渲染方法导致checkbox.visible =以前状态为true(viewstate = true),即检查状态。

特别是thnx到floremin和loren。

解决方案:您应该设置 – > EnableViewstate = True,ViewStateMode = Enabled,Autopostback = true。 就这样。 这对我有用。