В моих файлах есть следующий код:
В классе Customer.Page:
Try
If Not SiteContent.CurrentUser(False) Is Nothing Then
If Not SiteContent.CurrentUser(False).IsAdministrator OrElse SiteVariables.CustomerMode Then
SiteContent.PageViewManager.Create(New List(Of Control))
End If
Else
SiteContent.PageViewManager.Create(New List(Of Control))
End If
Catch ex As Heritage.Web.Content.Items.Exceptions.ExceptionGroup
My.Response.Write(ex.Message & "<br />" & ex.StackTrace & "<br />")
End Try
В элементе класса
Public Overridable Sub CheckValidity()
'If the item is recycled then return true'
If IsRecycled() Then
Exit Sub
End If
'ExceptionGroup to store all exceptions which are thrown due to invalid data.'
Dim ExceptionGroup As New Exceptions.ExceptionGroup
Try
'Checks if the item already exists'
Exists()
Catch ex As Exception
'Add any exception as a result of this function to the ExceptionGroup'
ExceptionGroup.AddException(ex)
End Try
'Check each attribute - add any exception which occurs as a result of validating their values to the ExceptionGroup'
For Each Attribute As Items.Attribute In GetAttributes
If TypeOf Attribute Is StringAttribute Then
Dim StringAttribute As StringAttribute = Attribute
Try
If Not StringAttribute.Validate(StringAttribute.Value) Then Throw New Exceptions.ItemExceptions.RequiredFieldException(StringAttribute.Name)
Catch ex As Exception
ExceptionGroup.AddException(ex)
End Try
ElseIf TypeOf Attribute Is IntegerAttribute Then
Dim IntegerAttribute As IntegerAttribute = Attribute
Try
If Not IntegerAttribute.Validate(IntegerAttribute.Value) Then Throw New Exceptions.ItemExceptions.RequiredFieldException(IntegerAttribute.Name)
Catch ex As Exception
ExceptionGroup.AddException(ex)
End Try
ElseIf TypeOf Attribute Is DateTimeAttribute Then
Dim DateTimeAttribute As DateTimeAttribute = Attribute
Try
If Not DateTimeAttribute.Validate(DateTimeAttribute.Value) Then Throw New Exceptions.ItemExceptions.InvalidFormatException(DateTimeAttribute.Name)
Catch ex As Exception
ExceptionGroup.AddException(ex)
End Try
End If
Next
'Rollback the transaction if the ExceptionGroup contains any Exceptions'
If ExceptionGroup.Exceptions.Count > 0 Then
RollbackTransaction()
Throw ExceptionGroup
End If
End Sub
Я знаю, что это может всекажется сложным, но вы должны быть в состоянии сделать вывод, что первый кусок кода ловит ExceptionGroup, брошенный во второй кусок кода.
Это в основном часть системы, где объекты создаются из строк в базе данных каки когда вначале требуется один из объектов (т. е. для каждой строки создается много объектов определенного типа, а затем извлекаются данные для каждого только при первом запросе. Каждый объект хранит экземплярDataRow, из которого атрибуты в объекте извлекают часть данных, в которой они нуждаются, когда значение атрибута впервые запрашивается).
Я хочу сказать, что это система, которую я создал с нуля, без какой-либо третьей стороныкод и не использовать Linq или любые другие причудливые вещи, как это (и я не хочу, прежде чем кто-либо скажет, чтобы переключиться на Linq или что-то в этом роде).
В любом случае группа ExceptionGroup, как вы можете сказать, заполняется другими исключениями, которые вызываются проверкой каждого атрибута.
Теперь проблема в этом.При запуске первого фрагмента кода без оператора try catch он выдает ужасный красно-желтый экран ошибки.Однако с оператором try catch загружается отлично.
Кто-нибудь знает, что может быть причиной этого странного поведения?Кто-нибудь когда-нибудь сталкивался с таким поведением раньше?
Заранее спасибо.
С уважением,
Ричард