2010-12-06 41 views
0

這有點難以解釋,所以請耐心等待。動態生成單選按鈕調用CheckedChanged事件

我有一個程序生成一些單選按鈕,並根據傳遞的級別(最多4級)分配一個CheckedChanged回發事件。當選中第一個級別(單選按鈕)時,會調用回發事件rb_CheckChanged00()並檢查該項目是否有子項,如果有,則會創建更多單選按鈕並將rb_CheckChanged01分配給CheckChanged事件對於這些 - 這部分工作正常。

我遇到的問題是,當我選擇已創建的第二個單選按鈕(孩子)時,它似乎根本沒有返回回發事件。當我點擊該頁面時,該頁面會回發,但所有內容都會重置,因爲它不會進入rb_CheckChanged01。

我知道這個信息很模糊,但我希望有人有關於回發事件如何工作的想法,以及我是否以某種方式錯誤地使用它。

使用:ASP.NET 2.0,IIS7

謝謝。

回答

2

大多數情況下,當動態創建的控件的事件未被觸發時,這是因爲控件在回發時被「重置」。

爲了確保在每次加載ViewState之前每次都確保每次都將控件的ID設置爲之前,每次都創建相同的控件。這樣,當控件被添加到頁面的控件集合中時,一旦ViewState被加載,它將保持它的屬性。 (只是爲了描述會發生什麼,簡而言之)

我讀到過的最好的文章之一是this one。確保你閱讀它,以充分理解背景中發生了什麼。

+0

排序。我現在根據存儲在會話中的ID在每個回發中生成我的單選按鈕。他們的ID與發佈時的ID完全相同,都在工作。謝謝你的幫助。 – webnoob 2010-12-06 11:26:19

1

看起來孩子RB在他們能夠觸發事件之前被清理。根據我的個人經驗,最好跟蹤那些動態生成的對象,並在每次回發中重新生成它們。這些事件將開始觸發:)

0

只有一件事情可以導致這種情況,您在page_load上創建了rb,並且不會將它們添加到列表<>或其他類似對象並將該對象添加到Session。你需要做的是當你創建項目,將它們添加到列表並將該列表添加到會話[「RadioButtons」]中,並且如果Page.IsPostBack爲true,則從保存在列表中的列表逐個加載控件你的會話到你的頁面。

1

您的控件和事件未在ViewState中註冊,因爲需要在Page_Init中加載動態控件。因爲它們沒有被保存在ViewState中,所以它們不會被註冊到事件中。類似的問題:

Problem with dynamic controls in .NET

相關問題