是的,還有類似的問題here。然而,這個問題似乎沒有附加代碼(雖然它可能在某些時候;我看到的答案暗指代碼),而接受的答案(和其他建議)沒有讓我在我需要的地方成爲。ASP.NET UserControl上的事件引發了其他每次點擊?
我有一個相當複雜,坦率地說不是很好設計的VB.NET Web應用程序,我正在擴展一個新功能。該功能的簡短形式是它允許管理用戶重新定位主頁上的某些元素。在此階段重新設計Web部件不是一種選擇。
的管理頁面,允許調整大小使用簡單的用戶控件來代表每個主頁上的「盒子」可以移動(原諒我的ASCII藝術):
+------------+
| Box Title |
+------------+
| /\ |
| <X> |
| \/ |
+------------+
四個箭頭(和中心X或眼睛,取決於盒子的可見度)是ImageButton
s。每個ImageButton
的Click
事件被連接到編碼類似於以下:
RaiseEvent WidgetMoved(Me, New WidgetMovedEventArgs(WidgetMoveDirection.Up, widgetIDField.Value))
在代管網頁(其本身上的MasterPage
)結合,在那裏它們被定位它決定了數據之後,開始這些用戶控制:
For i as Integer = 0 To count
Dim widget As MyWidget = widgets(i) '' widgets is a collection
Dim box as controls_CustomizeWidget = BindWidget(WidgetColumns.Left, i, count, widget) '' This simply uses LoadControl and places the control in one of two placeholders
AddHandler box.WidgetMoved, AddressOf widget_WidgetMoved
AddHandler box.WidgetVisibleChanged, AddressOf widget_WidgetVisibleChanged
Next
帶有此代碼的方法在每次頁面加載時調用,無論我是否在回發中。 (我「live-save」的數據;你做了一個修改,它在那個回發中保存到數據庫,然後重新加載。)
每其他回發,用戶控件按鈕事件不會觸發。他們發起了一個新的回傳,在第二個回合中,他們開火很好。所以,基本上,我的控件需要兩次點擊來完成任何事情。
具體而言,控件在Page.Load
事件處理程序中被初始化。我嘗試了PreInit
,但是這並不起作用,因爲頁面結構的其餘部分尚未構建,因此嘗試將它們放置在合適的PlaceHolder
s中時失敗,並顯示NullReferenceException
。我在網上搜索過,沒有看到任何這樣的內容,我不得不承認,在其他情況下,我通過用戶控件(例如,每個頁面)引發事件,這是沒有問題的。另一方面,這是網站上唯一的一個頁面,用戶可以在運行時動態加載帶事件的控件...
我現在感覺非常笨拙。每一次都可以幫助獲得可靠的事件?我究竟做錯了什麼?