按钮点击事件不会在第一次点击时触发,但始终会在后续点击时触发

时间:2012-11-29 01:11:18

标签: c# asp.net .net ajax

我有一个大型的asp.net项目,我正在研究(ASP.NET新手),我有一些动态添加按钮的问题,没有在第一次点击时触发他们的点击事件。奇怪的是,这并不总是发生;有时它们在第一次点击时工作得很好,有时如果我运行项目并按照完全相同的步骤按钮在第一次点击时不起作用。

这是一些背景......

有问题的页面用于将某些内容的不同版本部署到客户端。该页面有一个UpdatePanel,其中包含一堆表,并且在任何给定时间只能看到其中一个表。每个表代表一个类似向导的工作流程的不同“屏幕”。因此,当加载页面时,第一个表是可见的而所有其他表都不可见,第一个页面有一个带有部署类型的单选按钮列表和一个继续按钮。单击“继续”按钮时,将为下一个“屏幕”加载一些数据,并使第一个表不可见,并使下一个表可见。

现在你已经有了一些背景知识......

其中一个表上有一个空的Accordion,当点击上一个“screen”的Continue按钮时,Accordion会动态填充来自DB的数据;每个主要版本都有一个窗格,每个窗格都有一个表格,每个次要版本都有一行。这些行中的每一行都具有版本号,部署状态和允许用户部署版本的操作按钮,或者如果已经部署,则可以重新部署。无论如何,这些操作按钮是我在第一次点击时有时无法工作的问题。就像我说的那样,按钮是在上一个“屏幕”上的“继续”按钮的点击事件中创建的,我设置了每个按钮的ID,并在创建按钮时将事件链接到点击事件。我可以调试这个并看到添加的事件处理程序没有问题,但是当我第一次单击按钮时(这实际上不一致;有时它们第一次工作!)它们什么都不做,但在第二次点击时他们正常工作。我有一个名为populateAccordion()的方法,它负责从数据库中实际加载数据并使用其中的按钮创建这些记录。我在page_load上调用此方法,如果它是回发,但仅当前一个“屏幕”的缓存选择不为空时(即我在之前的“屏幕”上缓存subjectId和centerId,并且只加载Accordion数据,如果它们不为null)

这对于发布代码来说有点过于复杂,但是有没有人有任何想法可能会出错,或者我怎么能搞清楚这一点?我做了很多调试,我的populateAccordion()总是在前一个屏幕的Continue按钮上单击调用,然后在每个page_load上调用,并且Click事件总是在创建按钮时正确连接方法,所以我无法弄清楚为什么点击事件不会在第一次尝试时触发。

问题类似于本文中提到的问题......

https://stackoverflow.com/a/2784140/1246574

但我肯定会为我的所有按钮设置ID,因此该帖子中提到的解决方案不是解决我的问题。

我还阅读了很多其他帖子,说要将你的代码从Page_Load转移到Page_PreRender,但在这种情况下,这不会改变任何内容;它的行为完全一样。

我也试过设置按钮'UseSubmitBehavior = false,但没有运气。

谢谢!

1 个答案:

答案 0 :(得分:0)

这可能是延迟问题。听起来你可以在页面完全加载所有JS之前单击控件。那里有onload()函数吗?也许您可以尝试隐藏控件直到页面加载完毕?

相关问题