У меня есть объект 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
.
Я перепробовал все, что мог придумать, но не могу понять, что может быть не так. В моем проекте повсюду разбросаны события, и все они работают хорошо, используя практически одну и ту же структуру. Что я могу здесь делать не так?