2009-01-13 27 views
0

我有一個動態創建的表,並在一些細胞我與redBall_Click()處理相關聯的圖像按鈕ImageClickEvenHandler不調用處理程序

(這裏是後面的代碼)

TableCell cellOK = new TableCell(); 
    cellOK.Style.Add(HtmlTextWriterStyle.TextAlign, "Center"); 
    cellOK.Width = new Unit("3%"); 
    ImageButton redBall = new ImageButton(); 
    redBall.CausesValidation = false; 
    redBall.ID = id; 
    redBall.ImageUrl = "~/App_Themes/DotRed.png"; 

    redBall.Click += new ImageClickEventHandler(redBall_Click); 
    cellOK.Controls.Add(redBall); 

我的問題是從未調用redBall_Click()方法(在PostBack之後)

我該如何解決這個問題?

P.S. :我無法使用靜態鏈接,因爲每個ImageButton都與一個特定的ID相關聯,我必須將它傳遞給我呼叫的頁面(例如作爲Session對象)

回答

0

我終於解決了(就在昨天)。

我想我的按鈕時間太晚了:在Page_PreRender(事件被解僱後)也許如果我把這個創建放在Page_Load中(是的,我在PostBack上也創建了一切)它會處理點擊,但我認爲我不會嘗試,因爲我找到了解決方法。

我的人誰也有同樣的問題解釋:

private TableCell cellOK(string id) 
{ 
    TableCell cellOK = new TableCell(); 
    cellOK.Style.Add(HtmlTextWriterStyle.TextAlign, "Center"); 
    Image redBall = new Image(); 
    redBall.ID = id; // useless 
    redBall.ImageUrl = "redball.gif"; 
    HyperLink hl = new HyperLink(); 
    hl.Controls.Add(redBall); 
    hl.NavigateUrl = MyPage + "?id=" + id; 
    cellOK.Controls.Add(hl); 
    return cellOK; 
} 

和Page_Init()

string m_QueryStringId = Request.QueryString.Get("id"); 
if (!string.IsNullOrEmpty(m_QueryStringId)) 
{ 
    // Do something 
} 
0

您是否嘗試在頁面加載方法中放置斷點在點擊圖片之前?我懷疑這可能表明回發正在發生,即使圖像點擊處理程序未被觸發。

創建圖像按鈕的代碼是否也在回發期間被調用?如果沒有,頁面將回發,但圖像按鈕不存在以調用點擊處理程序。聽起來很奇怪,但它讓我出了幾次。

1

您必須在OnInt中設置事件處理程序,並在每次創建頁面時執行該操作,即使在回發期間也是如此。確保你塊內不有這樣的代碼:

if(!this.IsPostback) 
{ 
    ... 
}