【问题标题】:Checkbox not entering OnCheckChanged first time复选框未第一次输入 OnCheckChanged
【发布时间】:2010-08-04 21:42:03
【问题描述】:
<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 的容器)。我已经尝试在Page_Load 中重新订阅该活动,但它第一次没有命中,后来两次命中。

更新我已尝试完全删除 UpdatePanel。不仅整个页面回发,这是我不想要的,而且事件仍然没有进入。什么可以阻止/吞下这样的事件调用?在母版页或框架调用的深处或我看不到的地方是否有一些异常?

【问题讨论】:

    标签: c# asp.net webforms viewstate


    【解决方案1】:

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

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

    【讨论】:

    • 不,那是一个错字。我有正确的事件。我假设您使用的代码不包括更新面板或 Accordian。我留下了许多其他不相关的控件,但这些控件很可能与此行为相关。
    • 不,我在其中添加了一个 AccordionPane 控件和一个 UpdatePanel。等我回家后会发布源代码。现在,如果您在更新面板中添加触发器有什么不同吗?
    • 我完全去掉了更新面板。仍然表现相同。
    【解决方案2】:

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

    Viewstate 有一千人惨死。我现在已经足够接近解决问题了。感谢您尝试/查看。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-06
      • 2023-01-29
      • 2016-11-27
      • 1970-01-01
      • 1970-01-01
      • 2013-03-09
      相关资源
      最近更新 更多