Tôi đang viết một asp.net 4.5 ứng dụng sử dụng các tính năng định tuyến mới. Tôi có một trang hiển thị một số thông tin về một mục. Trong sự kiện Page_Load
tôi kiểm tra dữ liệu tuyến đường (id mặt hàng) và quyền của người dùng và nếu có điều gì đó không đúng (ví dụ: id dành cho mục đã xóa), tôi sử dụng Response.RedirectToRoute
để gửi chúng đóng gói, quay lại trang chủ. Không vượt qua GO, không thu 200 đô la.Đúng cách để bỏ qua hành trang sau Response.RedirectToRoute
này có ý nghĩa hoàn hảo cho đến khi tôi đã cố gắng để truy cập vào một mục bị xóa và thay vì trang nhà tôi có một trang lỗi. Tôi đã làm một số đào và phát hiện ra rằng ngay cả sau khi tôi sử dụng RedirectToRoute
(không giống như các tiêu chuẩn Redirect
phương pháp) phần còn lại của mã trang continues to execute, mà ít nhất dường như lãng phí (kể từ khi tôi chỉ cần đi vứt bỏ kết quả) và ném lỗi khi dữ liệu cần thiết không tồn tại.
tôi đã làm một chút SO hơn khai thác và phát hiện ra không thể tin được đó là evilResponse.End()
. Nó làm những gì tôi cần, nhưng ngay cả MSDN page cho tôi biết rằng Response.End
là đứa con khốn của một ngôn ngữ bị nguyền rủa cổ xưa và không phù hợp để nhìn thấy ánh sáng ban ngày. Các phản đối chính có vẻ là một thực tế rằng Response.End ném một ngoại lệ, và đó là xấu cho hiệu suất. Tôi không phải là nhà phát triển có kinh nghiệm nhất, vì vậy tôi không hiểu vấn đề hoàn toàn, nhưng tôi gặp khó khăn khi tin rằng việc ném một ngoại lệ là đắt hơn tải toàn bộ trang web. Các workarounds có vẻ khá phức tạp và quá mức cho một nhiệm vụ rất đơn giản, đặc biệt là vì hầu hết các trang yêu cầu một số loại kiểm tra tính hợp lệ.
Tôi phải làm gì trong tình huống này? Sử dụng Response.End
và cầu xin sự tha thứ cho sự xấc xược của tôi? Sỏi cùng nhau một số cách giải quyết xấu xí? Hoặc là quan điểm của tôi về vấn đề tất cả các sai lầm để bắt đầu với? Tôi thực sự muốn biết.
Cập nhật: Bây giờ tôi đã nghĩ nó hơn một chút nữa, tôi tự hỏi, nếu tôi có quan điểm sai về vấn đề này. Có lẽ chuyển hướng ngay lập tức không phải là phản hồi tốt nhất cho trải nghiệm người dùng. Tôi sẽ tốt hơn hết gói tất cả các điều khiển trong một bảng điều khiển, và sử dụng một cái gì đó như thế này?
Private Sub Page_Init(sender As Object, e As EventArgs) Handles Me.Init
'Validation Code
If notValid Then
ControlsPanel.Visible = false
ErrorPanel.Visible = true
End If
End Sub
Cảm ơn đã theo lên. Tôi không nhận ra rằng bạn có thể trả lời bằng mã lỗi và vẫn tải trang. Tôi chắc chắn sẽ ghi nhớ điều này trong tương lai. –