取消选中时,ASP.NET CheckBox不会启动CheckedChanged事件
|
我在ASP.NET内容表单上有一个CheckBox,如下所示: <asp:CheckBox runat="server" ID="chkTest" AutoPostBack="true" OnCheckedChanged="chkTest_CheckedChanged" /> 在我的代码背后我有以下方法: protected void chkTest_CheckedChanged(object sender,EventArgs e)
{
}
当我在浏览器中加载页面并单击复选框时,它将被检查,页面发回,我可以看到chkTest_CheckedChanged被调用。 当我再次单击复选框时,它将被取消选中,页面发回,但是没有调用chkTest_CheckedChanged。 该过程是可重复的,所以一旦CheckBox被取消选中,检查它将触发事件。 我在Web.Config中禁用了View State,启用View State会导致此问题消失。在View State仍然被禁用的情况下,我可以做什么可靠的事件触发? 更新: 更新2: 解决方法实现一个自定义CheckBox存储在ControlState而不是ViewState中的Checked属性可能会解决这个问题,即使复选框有AutoPostBack = false与ViewState不同,ControlState不能被禁用,可用于存储对控件行为至关重要的数据。 我现在没有视觉工作室环境来测试,但是应该是这样的: public class MyCheckBox : CheckBox
{
private bool _checked;
public override bool Checked { get { return _checked; } set { _checked = value; } }
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
//You must tell the page that you use ControlState.
Page.RegisterRequiresControlState(this);
}
protected override object SaveControlState()
{
//You save the base's control state,and add your property.
object obj = base.SaveControlState();
return new Pair (obj,_checked);
}
protected override void LoadControlState(object state)
{
if (state != null)
{
//Take the property back.
Pair p = state as Pair;
if (p != null)
{
base.LoadControlState(p.First);
_checked = (bool)p.Second;
}
else
{
base.LoadControlState(state);
}
}
}
}
更多信息here。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- controller – 基类中的ExecuteCore()在MVC 4 beta中未触发
- asp.net-mvc – 缺少webpages_UsersInRoles
- ASP.NET:开始%%的#是什么意思?
- asp.net – 我可以在一个Web项目中拥有多个web.config文件吗
- 使用ASP.NET共享托管的十大陷阱
- asp.net – 我希望从代码中获取属性值
- 线程是否在ASP.Net中的请求之间重用?
- asp.net – ImageButton不会在IE10上发回帖子
- asp.net-mvc-4 – 我似乎没有安装SignalR与MVC4
- asp.net-mvc-4 – MVC4/DotNetOpenAuth中的自定义OAuth客户
