ASP.NET CheckBox does not fire CheckedChanged event when unchecking

Viewed 74851

I have a CheckBox on an ASP.NET Content Form like so:

<asp:CheckBox runat="server" ID="chkTest" AutoPostBack="true" OnCheckedChanged="chkTest_CheckedChanged" />

In my code behind I have the following method:

protected void chkTest_CheckedChanged(object sender, EventArgs e)
{
}

When I load the page in the browser and click the CheckBox it becomes checked, the page posts back, and I can see chkTest_CheckedChanged being called.

When I then click the CheckBox again it becomes unchecked, the page posts back, however chkTest_CheckedChanged is not called.

The process is repeatable, so once the CheckBox is unchecked, checking it will fire the event.

I have View State disabled in the Web.Config, enabling View State causes this issue to disappear. What can I do to have reliable event firing while the View State remains disabled?

Update: If I set Checked="true" on the server tag the situation becomes reversed with the event firing when un-checking the CheckBox, but not the other way around.

Update 2: I've overridden OnLoadComplete in my page and from within there I can confirm that Request.Form["__EVENTTARGET"] is set correctly to the ID of my CheckBox.

10 Answers

I'm not sure but I guess that my solution is working only for .NET Framework 4.0:

Use ViewStateMode = "Disabled" to disable view state insted of EnableViewState="false". This will caution the same behavior except that you can save a local view state.

So, on your checkbox, set the attribute ViewStateMode = "Enabled" and the problem is solved, without implementing a custom checkbox.

The default value of "Checked" Property of CheckBox is false (which means Uncheck). So, when you Check/Uncheck the CheckBox it compares with Checked Property.

  • If it does not match with Checked Property, ASP fires OnCheckedChanged Event.
  • If it matches with the Checked Property it will not fire the OnCheckedChanged Event.

So, in order to make ASP to fire OnCheckedChanged event when unchecking, it has to know Original value, so that it compares with the value from user and fires the event.

By adding data-originalValue='<%# Eval("ValueFromCodeBehind") %>' property in asp:CheckBox will be able to fire the OnCheckChanged Event as ASP can now able to know its previous value. So that when we change it, ASP fires OnCheckChanged Event even if we do Uncheck.

Related