2012-11-29 56 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()函數嗎?也許你可以嘗試隱藏控件,直到頁面加載完成?