ASP.NET:非常简单的事件处理无法正常工作

时间:2009-09-13 18:13:01

标签: asp.net vb.net events

我有一个带有简单事件的对象Order

Public Event ErrorOccurred(ByVal msg As String)

当我无法找到订单时,我在构造函数中引发(沿着w /设置布尔错误标志:

RaiseEvent ErrorOccurred("This order does not exist in the database.")
[Error] = True

我订阅了订单ErrorOccurred活动的网络表单:

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

更改文本框后,它会自动恢复到页面并使用以下逻辑:

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行之后执行。

我已经尝试了我能想到的一切,但我无法弄清楚可能出现的问题。我的项目遍布各处的活动,并且使用几乎相同的结构都可以很好地工作。我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

我想说,既然你在构造函数中引发事件,在你甚至引用父类中的对象之前,你就无法处理事件。在这种情况下,尤其是构造函数中的错误,抛出异常可能比引发事件要好得多。我最好抛出一个异常,因为调用你的类的其他一些代码甚至可能都不会处理这个事件,你很可能想知道发生了一个错误。抛出异常是让调用代码知道发生错误的标准方法。事件更多是调用类可能想要处理的可选事物,但它也可能想要忽略。