Это очень странно. Я проверил страницу CheckBox документации , которая читает
<asp:CheckBox id="CheckBox1"
AutoPostBack="True|False"
Text="Label"
TextAlign="Right|Left"
Checked="True|False"
OnCheckedChanged="OnCheckedChangedMethod"
runat="server"/>
Как видите, атрибуты OnClick или OnClientClick не определены.
Имея это в виду, я думаю, что это то, что происходит.
Когда вы делаете это,
<asp:CheckBox runat="server" OnClick="alert(this.checked);" />
ASP.NET не изменяет атрибут OnClick и отображает его в браузере. Он будет представлен как:
<input type="checkbox" OnClick="alert(this.checked);" />
Очевидно, что браузер может понимать «OnClick» и выдает предупреждение.
И в этом сценарии
<asp:CheckBox runat="server" OnClientClick="alert(this.checked);" />
Опять же, ASP.NET не изменит атрибут OnClientClick и отобразит его как
<input type="checkbox" OnClientClick="alert(this.checked);" />
Поскольку браузер не понимает OnClientClick, ничего не произойдет. Это также не вызовет никакой ошибки, поскольку это просто еще один атрибут.
Вы можете подтвердить выше, посмотрев на визуализированный HTML.
И да, это совсем не интуитивно понятно.