網上有很多關於這個主題的帖子,但我找不到適合我的情況的帖子;動態創建的分類下拉列表沒有觸發事件
我有一個BasePage類,它是我的.aspx繼承的;我也有BaseLabel & BaseDDL類,分別擴展標籤&下拉列表。最重要的是,我有一個ReadyDDL類,它將BaseLabel & BaseDDL組合到單個控件中(但這是一個類,而不是用戶控件),並將它們與他們自己的Div,Table,TableRow,TableCells,&另一個Label進行了呈現。該ReadyDDL類使我定義標籤在一個單一的HTML語句&下拉列表&佈局按:
<moc:ReadyDDL ID="Person" runat="server" Member="@UserID" Caption="Create strike for"
DataSourceSQL="SELECT ID, UserName FROM [User] WHERE isDeleted = 0 AND ClientID = 3" TextField="UserName" ValueField="ID"
OnSelectedIndexChanged="ddl_SelectedIndexChanged" />
但是我有一個問題或兩個:
一)事件犯規火災。我已閱讀這個主題的帖子說,必須重新創建下拉菜單OnInit &一切都會好起來的。但 -
我沒有動態地創建一個下拉列表,而是一個自定義擴展 - 因此創建dropdownlist的代碼並沒有在我的aspx中定義事件處理程序,而是在一個單獨的.cs文件中,並且因此,我不能寫
ddl.SelectedIndexChanged + = new EventHandler(X);
因爲X不存在於類中,只有頁面。
我發現解決這個問題的唯一方法是公開一個字符串屬性(OnSelectedIndexChanged),它在BaseDDL中設置另一個屬性,並且在渲染BaseDDL時,將OnSelectedIndexChanged屬性添加到生成的標記中。
生成的html看起來不錯,在屏幕上它看起來沒問題,當我更改控件中的選擇時會回發,但事件處理程序不會觸發:它當前只包含一些賦值語句,我有一個斷點,並沒有達到。
反思一下,我想,渲染處理程序只會將事件添加到控件中,只要客戶端關心,服務器不知道它 - 但我該如何克服這一點,並在控制中定義處理程序初始化,當處理程序不在初始化代碼相同的源代碼文件?
有沒有人有任何想法(1)讓事件觸發,或者(2)我如何在代碼中定義事件,而不是通過渲染?
有任何問題,請提出。任何幫助或建議將不勝感激,如果有合適的信息,我會將Q標記爲已回答。
b)選擇的值在回發時丟失。我知道我必須對Viewstate做些什麼,但我還沒有想出什麼。如果你知道如何實現這個解決方案,一個簡短的例子將不勝感激。
你在下拉菜單中設置了「AutoPostBack = true」?當正在錄製事件時,在ReadyDDL中使用 –
。 –