[英]why does checkchanged event does not fire on uncheck of checkbox in asp.net
Part of attendance tracker application which displays subjects of user and lets him mark his own attendance. 显示用户主题的出勤跟踪器应用程序的一部分,并让他标记自己的出勤率。
With enableviewstate="true", the checkbox does not get unchecked and the checkchanged event does not execute. 使用enableviewstate =“true”时,复选框不会被取消选中,并且checkchanged事件不会执行。
namespace portal
{
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 "B.E": sem = 8;
break;
case "T.E": sem = 6;
break;
case "S.E": sem = 4;
break;
case "F.E": 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() + "<br />";
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
{
}
}
}
}
From MSDN ( http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.checkbox.oncheckedchanged.aspx ): 来自MSDN( http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.checkbox.oncheckedchanged.aspx ):
A CheckBox control must persist some values between posts to the server for this event to work correctly.
CheckBox控件必须在发布到服务器的帖子之间保留一些值才能使此事件正常工作。 Be sure that view state is enabled for this control.
确保为此控件启用了视图状态。
When (html) checkbox is not checked and form is submitted, no value would be passed back to server, that's why you need to enable ViewState for this control, so ASP.NET would keep track of the state (checked/unchecked). 如果未选中(html)复选框并提交表单,则不会将任何值传递回服务器,这就是您需要为此控件启用ViewState的原因,因此ASP.NET将跟踪状态(已选中/未选中)。
删除EnableViewState =“false”,它应该可以正常工作
Thank you everyone for your consideration. 谢谢大家的考虑。 Problem finally solved.
问题终于解决了。 On uncheck event by user the checkchanged method was not executing because 1)with autopostback on, uncheck caused execution of page_load method, which in turn caused the checkbox.visible= false, so checkchanged didnot executed, and then calendar render method caused checkbox.visible =true with the previous state(viewstate=true) ie checked state.
在用户取消选中事件时,checkchanged方法没有执行,因为1)启用了autopostback,取消选中导致执行的page_load方法,这反过来导致checkbox.visible = false,因此checkchanged没有执行,然后日历渲染方法导致checkbox.visible =以前状态为true(viewstate = true),即检查状态。
special thnx to floremin and loren. 特别是thnx到floremin和loren。
Solution: you should set-> EnableViewstate = True, ViewStateMode = Enabled, Autopostback = true. 解决方案:您应该设置 - > EnableViewstate = True,ViewStateMode = Enabled,Autopostback = true。 that's all.
就这样。 this works me.
这对我有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.