2009-10-13 40 views
18

Có OK để bắt ngoại lệ của tôi trong các hành động của bộ điều khiển không? Có cách nào tốt hơn để làm điều đó không? Tôi đang thực sự bắt ngoại lệ của tôi trong bộ điều khiển và sử dụng TempData để hiển thị một thông báo cho người dùng, nhưng tôi có một cảm giác kỳ lạ về cách tiếp cận này. Tôi đã được duyệt xung quanh nhưng tôi đã không tìm thấy bất cứ điều gì phù hợp với tôi.Xử lý ngoại lệ ASP.NET MVC

+0

Đây là cũ nhưng tôi chỉ muốn cung cấp bài đăng của tôi dưới dạng ref (** các vấn đề với HandleError **) trong khi đi qua - http://stackoverflow.com/questions/12183653/mvc-handleerror-filter-didnt-catch-an-exception –

Trả lời

11

Bạn có thể sử dụng thuộc tính HandleError trên lớp bộ điều khiển để bắt bất kỳ ngoại lệ chưa được xử lý nào và nó sẽ tự động trả về chế độ xem Error.aspx trong thư mục Được chia sẻ. Có quá tải cho thuộc tính này, do đó bạn chỉ có thể có nó được sử dụng với nhiều loại ngoại lệ nhất định, vv

Để biết thêm thông tin về phương pháp này, hãy kiểm tra bài ScottGu về nó: http://weblogs.asp.net/scottgu/archive/2008/07/14/asp-net-mvc-preview-4-release-part-1.aspx

+0

Điều này thật thú vị, nhưng cách khác tôi có thể chuyển hướng đến các khung nhìn tiêu chuẩn (ví dụ "Index") và hiển thị một thông điệp được cá nhân hóa cho ngoại lệ cụ thể ... –

+0

Các trang Error.aspx được gắn với lớp HandleErrorInfo, cho thấy các thuộc tính của ngoại lệ. Nếu bạn đang gửi Thông báo ngoại lệ được cá nhân hóa, bạn có thể hiển thị thông báo đó cho chế độ xem. Sách của Steve Sanderson "Pro ASP.NET MVC Framework" bao gồm một số cách để làm điều này, và cũng làm thế nào để tạo ra các bộ lọc ngoại lệ của riêng bạn. Tôi khuyên bạn nên chọn cuốn sách đó. – mkchandler

+0

Có thể mở rộng HandleError để cho phép xác định TempData? Tôi nghĩ rằng tôi sẽ điều tra về điều này. Cảm ơn ... –