2013-01-08 20 views
0

我有以下情形:按鈕在CustomControl中添加的OnClick不回傳,直到第二次點擊

  1. UserControlA包含了一些代碼,一個項目一個購物籃在AddItem一個<asp:Button id="bSomeid" onClick="AddItem" />
  2. UserControlB包含一些LinkButton的動態添加選擇UserControlAOnClick事件中的頁面。

這一切都在UpdatePanel完成。這有點複雜,但我已經將信息修剪到了我認爲會導致問題的地方,如有必要,我會添加更多信息。

我遇到的問題是點擊LinkButton之後,我添加了項目到頁面後,需要2次點擊才能觸發AddItem事件。

我明白爲什麼會發生這種情況 - 在頁面週期的晚些時候在onclick上註冊下一篇文章的事件 - 但任何人都可以想到一種解決方法嗎?我可以強制在下一次回傳中觸發事件嗎?我試圖想辦法在page_load中運行我的代碼,但我需要訪問中的sender

使用.NET 4.0。

編輯

我設法找到一種方式來獲得鏈接按鈕(使用Request.Form["__EVENTTARGET"];)發送在Page_Load請求讓我感動我的代碼爲Page_load事件。它仍然需要2次點擊,所以我認爲這與onClick被註冊的時間沒有關係。

是否有任何其他一般事情要檢查,可能導致按鈕需要2次點擊才能正確發佈事件?

回答

0

如果您懷疑網頁生命週期延遲是真的,那麼您可以嘗試使用ScriptManager.RegisterAsyncPostBackControl方法在鏈接按鈕點擊中註冊動態添加的控件 - 考慮到您的按鈕在用戶控制之內,您需要將公共方法添加到UserControlA實際上會註冊按鈕bSomeid1和鏈接按鈕點擊從UserControlB實際上會調用A控件的方法。

編輯

對按鈕的另一個原因點擊沒有發生可以是按鈕被動態控制未在當後回發生在頁面層次結構中添加(或它就會在頁面生命週期添加很晚當回發數據已經處理時)。一個真正全面的解決方案應該將動態控件添加到它自己的頁面層次結構中(並嚴格地在層次結構中維護相同的控件ID)。如果這是不可能的,那麼你可以嗅探請求(Request.Form)來檢測回發。

在你的情況下,你應該確定按鈕是否確實導致每次點擊後回傳。如果是,則第一個請求的POST數據(Request.Form)是什麼 - 第一次點擊(和回發)時的__EVENTTARGET值是多少?這應該開始你的疑難解答。

另一方面,一個簡單的解決方法可能是使用html錨點元素(您仍然可以使用鏈接按鈕)並在click事件中設置一個javascript處理程序,它將設置一些隱藏變量,然後提交表單你可以模擬點擊隱藏按鈕來觸發ASP.NET客戶端提交管道)。現在隱藏的變量值可以用於回傳以確定哪個鏈接按鈕已被點擊。

+0

我試過了,但仍然需要2次點擊。我也嘗試將我的代碼移動到page_load,它仍然需要2次點擊。我認爲其他事情是錯誤的。任何粗略的想法是什麼會導致按鈕有2次點擊來觸發事件? – webnoob

+0

@webnoob,看我的編輯。 – VinayC

0

「是否還有其他一般事情要檢查,可能導致按鈕需要2次點擊才能正確發佈事件?」

是否需要在控件上點擊兩次,還是需要在屏幕上的其他位置接受一次單擊,然後在控件上單擊一下就會觸發第一次?

我有在UpdatePanel我自己的(類似的)問題,即第一(預期)觸發不火,似乎只需點擊一下其他地方,然後在隨後的觸發器觸發第一時間(共計2次點擊)

因爲你正在使用這臺ATM機,所以它也可以幫助我。你有一個帶有觸發事件的文本框嗎?我這樣做,如果我留下這個空白(以便它不會觸發),那麼不需要再次點擊。

相關問題