我在一个ASP.NET内容表单上有一个复选框,代码如下:
<asp:CheckBox runat="server" ID="chkTest" AutoPostBack="true" OnCheckedChanged="chkTest_CheckedChanged" />
在我的代码后台中,我有以下方法:
protected void chkTest_CheckedChanged(object sender, EventArgs e)
{
}
当我在浏览器中加载页面并单击复选框时,它变为选中状态,页面进行了提交(postback),我可以看到chkTest_CheckedChanged
被调用。当我再次单击复选框时,它变为未选中状态,页面进行了提交,但是chkTest_CheckedChanged
没有被调用。这个过程可以重复,因此一旦复选框取消选中,再次选中将触发事件。我已经在Web.Config中禁用了View State,启用View State会使这个问题消失。有什么方法可以在View State保持禁用的情况下实现可靠的事件触发?
更新:如果我在服务器标记上设置
Checked="true"
,情况就会反转,当取消选中复选框时,事件会被触发,而选中时不会。更新2:我在页面中覆盖了
OnLoadComplete
,从那里我可以确认Request.Form["__EVENTTARGET"]
正确设置为我的复选框的ID。