2012-11-29 74 views
0

我有我的工作(新的ASP.NET)大规模asp.net项目,我有一个问题一些动态添加的按钮不会在第一次点击时触发点击事件。奇怪的是,这并不总是发生;有时候他们在第一次点击时工作得很好,而其他时候如果我运行该项目并按照完全相同的步骤进行操作,则该按钮在第一次点击时不起作用。按钮单击事件将不触发首先点击,但总是在随后的点击触发

这里的一些背景...

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

所以,现在你有一些背景,在这个问题......

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

这是一个有点太复杂张贴代码,但没有任何人有任何想法可能是想错了,不然我怎么会想出解决办法?我已经做了相当多的调试,而我的populateAccordion()始终正常调用的上一画面的继续按钮点击,并在此后每Page_Load中,然后单击事件总是连接好权当在创建按钮方法,所以我无法弄清楚为什么点击事件不会在第一次尝试时触发。

的问题是类似于这篇文章中提到的一个...

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

但我绝对设定的ID为我所有的按钮,所以在这个帖子中提到的解决方案是不解决我的问题。

我也看到了不少其他职位,说从Page_Load中到Page_PreRender移动你的代码,但是这并没有改变在这种情况下,任何东西;它的行为完全一样。

我也尝试设置按钮的UseSubmitBehavior =假,但没有运气。

谢谢!

+1

你可能想要减少你的问题,像这样的文字墙让人望而却步。 – Tyrsius

回答

0

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