我有一個簡單的事件的對象Order
,ASP.NET:很簡單的事件處理無法正常工作
Public Event ErrorOccurred(ByVal msg As String)
,我在像這樣的構造提高當訂單無法找到(沿W /設置布爾錯誤標誌:
RaiseEvent ErrorOccurred("This order does not exist in the database.")
[Error] = True
我訂閱了訂單的ErrorOccurred
事件一個WebForm:
Public WithEvents o As New Order
和我有表單上的錯誤處理程序方法:
Private Sub OnErrorOccurred(ByVal msg As String) Handles o.ErrorOccurred
litMsg.Text = "<p class=""error-confirm"">" & msg & "</p>"
End Sub
當文本框被改變時,它autoposts回頁面,並採用以下邏輯:
Private Sub txtOrderID_TextChanged(ByVal sender As Object,_
ByVal e As System.EventArgs) Handles txtOrderID.TextChanged
If IsNumeric(txtOrderID.Text) Then
If o.OrderID = 0 Then o = New Order(txtOrderID.Text)
If Not o.Error Then
'do stuff'
Else
'error, run error handling'
End If
....
當存在錯誤(當Else
邏輯運行時),除非事件未觸發,否則所有內容都按預期執行。但是,由於Error
標誌設置爲true,這意味着事件必須已經觸發,因爲該行在RaiseEvent
行之後執行。
我試過了所有我能想到的東西,但我無法弄清楚什麼可能是錯的。我的項目中到處都有活動,他們都使用幾乎相同的結構很好地工作。我在這裏做錯了什麼?
那麼這是說,你不能真的在構造函數中引發事件? – Jason 2009-09-13 18:21:07
謝謝....這真的有幫助 – Jason 2009-09-13 18:27:34
這是正確的,至少是你編碼它的方式。我可以通過構造函數來處理事件的唯一方法是在拋出事件之前,從被調用者傳入對調用者的引用,並添加事件處理程序explicity。 – Kibbee 2009-09-13 18:31:25