12

Tôi có một lớp ngoại lệ tùy chỉnh như sau:Thêm thuộc tính bổ sung trong Tuỳ chỉnh ngoại lệ trở về AJAX chức năng

<Serializable> 
Public Class SamException 
    Inherits Exception 
    Public Sub New() 
     ' Add other code for custom properties here. 
    End Sub 
    Public Property OfferBugSend As Boolean = True 

    Public Sub New(ByVal message As String) 
     MyBase.New(message) 
     ' Add other code for custom properties here. 
    End Sub 

    Public Sub New(ByVal message As String, ByVal inner As Exception) 
     MyBase.New(message, inner) 
     ' Add other code for custom properties here. 
    End Sub 

End Class 

Tôi đang sử dụng này đối với trường hợp nhất định trong lợi nhuận từ phản ứng AJAX.

Trong hàm sai số của phản ứng AJAX của tôi Tôi xác định rằng lỗi là loại tùy chỉnh của tôi như thế này:

.... 
ajax code.... 
.error = function (xhr, text, message) { 
    var parsed = JSON.parse(xhr.responseText); 
    var isSamCustomError = (parsed.ExceptionType).toLowerCase().indexOf('samexception') >= 0; 
.... etc.... 

này cho phép tôi gửi lại một phản ứng cụ thể cho khách hàng nếu lỗi là của loại tùy chỉnh của tôi.

NHƯNG ... Tôi có vẻ không nhận được nó để đăng tài sản bổ sung OfferBugSend cho khách hàng để mã AJAX xử lý trường hợp này theo cách khác.

console.log("OfferBugSend: " + parsed.OfferBugSend) 

đang hiển thị không xác định, và nếu tôi kiểm tra phản ứng, điều này là do xhr.responseText chỉ chứa các thuộc tính:

ExceptionType 
Message 
StackTrace 

Các tính chất này từ các lớp cơ sở Exception nhưng nó không phải là đi qua lớp tùy chỉnh của tôi các thuộc tính ...

Làm thế nào tôi có thể thực hiện điều đó?

+1

Vui lòng đính kèm ví dụ về cách bạn gửi AJAX và ném 'SamException'. – codeDom

+0

Tôi khuyên bạn nên thử nắm bắt mã bạn muốn. Nếu bạn nhấn ngoại lệ của bạn, hãy ném ngoại lệ đó lên từ BLL/DAL vào lớp Trình bày của bạn. Trong lớp bản trình bày của bạn, hãy cung cấp cách trả về loại ngoại lệ mới sẽ được chuyển đổi từ ngoại lệ của bạn. Ví dụ là, hãy thử bắt (ngoại lệ đặc biệt) {return new {.SpecialMessage = "IamError",. IsError = True}. Trong Ajax của bạn, kiểm tra IsError. – Programmer

Trả lời

3

Lớp ngoại lệ có thể tuần tự hóa, nhưng nó chứa một IDictionary và triển khai thực hiện ISerializable, đòi hỏi nhiều công việc hơn để tuần tự hóa lớp ngoại lệ tùy chỉnh của bạn.

Cách dễ dàng hơn để đối phó với điều này là bằng cách tận dụng các Data bộ sưu tập của lớp Exception như vậy:

Public Property OfferBugSend As Boolean 
    Get 
     Return Data("OfferBugSend") 
    End Get 
    Set(value As Boolean) 
     Data("OfferBugSend") = value 
    End Set 
End Property 

Một cách khác để làm điều này là để đảm bảo lớp được thừa kế của bạn cũng thực hiện các giao diện ISerializable, trong đó bao gồm cung cấp một hàm tạo tuần tự và ghi đè GetObjectData(). Xem này other answer (trong C#) làm đường cơ sở cho phương pháp đó.

Các vấn đề liên quan