我在.ascx文件上有一个复选框。此.ascx文件位于一个封闭的源Web应用程序中,有些东西阻止了checkchanged事件每隔一次触发。
当我第一次加载页面并单击复选框(检查它)时,第一次触发checkchanged事件。如果我第二次点击它(取消选中),则不会触发checkchanged事件。如果我再次检查它,则事件被触发,当我再次取消选中时,它不会触发并继续如此。如果我将复选框的默认值设置为true,则在加载时,只有在第一次取消选中时才会触发,并且在第二次检查时不会触发,同样的效果会发生。
此.ascx所在的页面将EnableViewState设置为true以及.ascx,我甚至尝试在复选框本身上设置它。该复选框也将AutoPostBack设置为true。
如果我将.ascx文件从此应用程序中取出并将其放在测试Web应用程序页面上,它将按预期工作。我还要提一下,复选框位于更新面板内,但似乎没有关联,因为如果我删除更新面板,它仍会产生相同的不利影响。
此应用程序中的内容可能是阻止checkchanged事件每隔一次触发一次?
答案 0 :(得分:2)
<asp:UpdatePanel>
<ContentTemplate>
//Content
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="yourCheckBox" />
</Triggers>
</asp:UpdatePanel>
更新: 您是否尝试通过代码强制使用autopostback属性
CheckBox checkbox = yourFormOrContainer.FindControl(yourCheckBox.ID) as CheckBox;
if(checkbox != null)
{
checkbox.AutoPostBack = true;
}
第二次更新:每个微软: CheckBox控件必须在发布到服务器的帖子之间保留一些值才能使此事件正常工作。确保为此控件启用了视图状态。
如果你将值保存到数据库,当页面/ updatepanel回发时,你是否回退它的值,我怀疑它得到它的旧值,所以它仍然认为它已经检查,因此没有触发。如果最初在更新面板中,您是否使用 Bind 来设置其数据值,可能是一个字段?
答案 1 :(得分:0)
这是我推测的:如果我想要一个行为方式的复选框(无论出于何种原因)我可能会重载该类,然后保持一个int(或状态bool)跟踪/切换任何更改,让只有当bool为真时,事件才会冒泡,int可以被2整除。
(检查http://odetocode.com/code/94.aspx代码并想象onclick方法中的if语句,看看我的意思。)
至于保持计数器/状态变量,如果它不在Viewstate中,它可能隐藏在ControlState,Session甚至应用程序缓存中。 (顺便说一句,如果你还没有......那么试着列出所有这些......)
然后,这可能是天真的,但可能是“unchecked”事件是单独触发的 - 并且必须在自己的处理程序中处理?我见过愚蠢的事情......我想。
答案 2 :(得分:0)
这值得检查,因为我有similar problems。
您已确认已检查页面上的EnableViewState属性和Control本身。但是,ViewState会级联,因此如果您在控件中拥有控件,并且父控件的EnableViewState设置为false,则子控件即使启用了ViewState,也仍然没有ViewState。
我有一堆嵌套控件,其中一个禁用了ViewState,它让我烦恼了好几个小时。
答案 3 :(得分:0)
目前我们正在使用FubuMVC慢慢重写应用程序。我有fubu和webforms并行运行,所以我能够使用fubu重写这个小部分,而不是再浪费时间来处理这个问题的Web表单。
我知道对大多数人来说,这不是一个选择,但这就是我解决它的方式。
答案 4 :(得分:0)
设置AutoPostBack =“True”对我有用