ASP.NET: очень простая обработка событий не работает - PullRequest
0 голосов
/ 13 сентября 2009

У меня есть объект Order с простым событием,

Public Event ErrorOccurred(ByVal msg As String)

, который я поднимаю в конструкторе, например, когда не удается найти заказ (вместе с установкой логического флага ошибки:

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 Ответ

2 голосов
/ 13 сентября 2009

Я бы сказал, что, поскольку вы вызываете событие в конструкторе, еще до того, как у вас есть ссылка на объект в родительском классе, вы не можете обработать событие. В этом случае, особенно с ошибками в конструкторе, вам, вероятно, было бы гораздо лучше создать исключение, чем вызывать событие. Я бы лучше выбрасывал исключение, потому что какой-то другой код, вызывающий ваш класс, может даже не обрабатывать событие, и вы, скорее всего, захотите знать, что произошла ошибка. Создание исключений - это стандартный способ сообщить вызывающему коду о возникновении ошибки. События предназначены скорее для необязательных вещей, которые может вызывать вызывающий класс, но которые он также может игнорировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...