复选框第一次没有输入OnCheckedChanged

时间:2010-08-04 21:42:03

标签: c# asp.net webforms viewstate

<ajaxtoolkit:AccordionPane ID="accordianPaneAroundTheCheckbox" runat="server">
    <Content>
        <asp:UpdatePanel ID="updatePanelAroundTheCheckbox" runat="server" >
            <ContentTemplate>
                <div>
                    <asp:CheckBox ID="chkFoo" AutoPostBack="true"  runat="server" OnCheckedChanged="DoBar"/>
                </div>
            </ContentTemplate>
        </asp:UpdatePanel>
    </Content>
</ajaxtoolkit:AccordionPane>

我们有类似上面的内容。因为它是一个大页面,所以剩下的东西已经停止了。

我在Page_LoadDoBar的开头放置一个断点。我第一次点击该复选框时会点击Page_Load上的断点,但DoBar不会。第二次单击复选框时,两个断点都被点击。

为什么会发生这种情况?我没有动态生成复选框。它的ClientID每次都是相同的(没有动态生成或ID'd容器)。我已经尝试重新订阅Page_Load中的活动,但它没有第一次出现,只是两次点击它。

更新我尝试完全删除UpdatePanel。整个页面回发不仅是我不想要的,而且还没有输入事件。什么可以阻止/吞下这样的事件调用?在母版页或框架调用的内容深处是否存在某些异常或某些我无法看到的内容?

2 个答案:

答案 0 :(得分:0)

这是您粘贴的正确源代码吗?我问,因为没有名为OnCheckChanged的事件,但是有一个OnCheckedChanged事件。使用您的代码,当复选框的标记如下所示时,它可以正常工作:

<asp:CheckBox ID="chkFoo" runat="server" AutoPostBack="true" OnCheckedChanged="DoBar"/>

答案 1 :(得分:0)

服务器端没有设置任何复选框。该表单由对PageMethod的ajax调用填充,该PageMethod从服务器提取数据字节并填充控件。问题是服务器认为它未经检查,但是javascript检查了它。当我取消选中它时,回发发生了,并且视图状态仍然认为其先前状态未被选中,并且当前状态现在未经检查。因此,CheckedChanged事件不会触发。

Viewstate有一千个可怕的死亡。我足够接近现在解决这个问题。感谢您的努力/寻找。