我有一个简单的事件的对象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