2010-04-12 138 views
1

我有一個控件,其中有一個ImageButton綁定到一個OnClick事件...單擊此控件後,將執行回發並且不會調用事件處理程序。 AutoEventWireup已設置爲true,並且我已經加倍檢查了拼寫等......我們在一年之內沒有觸及過此控件,直到幾周前它一直運行正常。ASP.NET控件事件處理程序在回發時未觸發?

我們對加載此控件的控件進行了更改......所以我想知道,可以通過什麼樣的更改來阻止此事件處理程序被調用?有相當多的JavaScript代碼的事情,所以這可能是罪魁禍首太...

編輯:一些澄清......我們動態加載ImageButton的父控件在頁面的onload事件......如果這是有道理的。

回答

0

所以,事實證明,我們在控制一個設置PostBackUrl屬性對我們的按鈕中的一個......這引起了控制事件處理程序不火的時候,在控制一個按鈕是按下。

+0

嗨,我似乎有一個類似的問題。我想知道您是否可以詳細闡述您的解決方案。也許從控件A和B開始吧?鈕釦?集裝箱?我在這裏先向您的幫助表示感謝! – John 2010-05-06 16:30:31

2

AutoEventWireup是無關緊要的。你的ImageButton是動態加載的,也就是說沒有標記出來嗎?如果它在頁面生命週期的後期加載到頁面上,例如在PreRender中,事件不會觸發。

如果有JavaScript問題,您的網頁甚至不會回發。這是否發生?

+0

該網頁絕對是後備...只是沒有事件...是的,控制看起來像它是動態的(我們有一個自定義控件加載這個)。 – Polaris878 2010-04-12 21:39:38

+0

在這種情況下,確保將它放到生命週期的事件處理程序部分的頁面上。這意味着在OnInit或OnLoad。如果可以,OnInit會更好,因爲它會減少ViewState。即Page.Controls.Add(myImageButton)應該發生OnInit(或OnLoad) – BritishDeveloper 2010-04-12 22:03:37

+0

並且是imageButton的Click事件綁定OnLoad呢?如果是的話,那麼一些瘋狂的事情正在發生......(如果你對骯髒的代碼感興趣,我有一個黑客) – BritishDeveloper 2010-04-13 10:44:43

1

我同意BritishDeveloper所說的。我在動態加載控件時遇到了類似的問題,但我無法獲得對控件的引用。有人指出我需要始終記住頁面生命週期。我發現我需要確保在PageInit中加載控件,因爲在執行異步回發之後,控件仍然存在,但未在回發中加載,因此無法找到它。這是所有csharp代碼隱藏和ajax,但我猜控制沒有得到重新加載。

2

您是否給ImageButton一個ID?

+0

是的,它肯定有一個ID :) – Polaris878 2010-04-12 22:25:59

+1

做任何它的父控制(可能是動態創建的)沒有ID?大多數情況下,當我遇到類似這樣的事情時,這是因爲在控制樹的某個地方沒有分配ID – zincorp 2010-04-13 19:39:14

+0

這對我來說是個竅門,謝謝! – chteuchteu 2015-02-09 09:43:28

0

如果您動態創建控件。任何時候使用新創建的控件啓動回發,都需要重新創建它。只要認爲你的應用程序正在服務器上運行。服務器如何保存關於動態創建的控件的信息?不要使用Page.IsPostBack創建回傳。 PostbackUrl是不好的解決方案。 Workarround將是需要的。

0

我可以進一步瞭解更多細節......我剛剛失去了幾個小時來解決我自己的問題,類似於這裏描述的問題。在創建一些搜索控件的過程中,我添加了一對ImageButton並在它們上設置PostbackUrl屬性。幾天後,在測試新代碼時,我注意到網絡表單上沒有其他按鈕正確回發。他們會發布回傳,但代碼隱藏行爲就好像每個回發都是初始頁面請求,並且沒有事件處理程序正在發射。

經過幾個小時的故障排除,我遇到了這篇文章。當我回去並從這兩個ImageButton中移除PostbackUrl時,一切都恢復正常。我不知道這是爲什麼導致這個問題,但這裏提到的修復工作適合我。我想補充說,我的ImageButtons沒有動態添加...他們在標記中,這個問題仍然出現。使用PostbackUrl設置搜索你的標記以獲取任何控件......刪除它(如果需要的話,可以在程序周圍)...查看你的事件處理程序是否會正確觸發。

相關問題