2013-03-04 24 views
5

sự kiện được chạy khi chúng tôi truy cập trang khác. là nó dỡ hàng?Destructor in Asp.net

Protected Sub Edit_Unload(sender As Object, e As EventArgs) Handles Me.Unload 

End Sub 
+6

Không có gì đảm bảo rằng mọi sự kiện sẽ chạy. –

+0

Và, đối với một "destructor", _finalizer_ cho cá thể trang của bạn thường chạy trước khi người dùng của bạn thậm chí còn nhìn thấy trang. Hãy nhớ rằng một cá thể trang chỉ kéo dài trong vòng đời của một yêu cầu http. Ngay cả postback cho cùng một trang trong cùng một phiên được xử lý bởi các trường hợp khác nhau. Một cá thể trang chạy vòng đời trang để tạo ra html được gửi đến trình duyệt. Khi html này đã sẵn sàng và được truyền đi, cá thể trang có thể được GC thu thập. Đôi khi điều này xảy ra trước khi trình duyệt thậm chí có thể hiển thị phản hồi cho màn hình. –

+2

Điều hướng đến một trang khác xảy ra ở phía máy khách, chứ không phải phía máy chủ. Khi bạn thấy trang trong trình duyệt của mình, máy chủ không còn liên quan. Không có sự kiện phía máy chủ nào được kết hợp với điều hướng từ trang này sang trang khác trừ khi bạn sử dụng một số loại liên kết phía máy chủ, như 'Liên kếtButton'. Thậm chí sau đó, bạn không thể kiểm soát người dùng chỉ cần nhập một url khác vào trình duyệt của họ và bỏ qua toàn bộ chuyển hướng máy chủ. – mellamokb

Trả lời

3

Unload là sự kiện cuối cùng trong ASP.NET Page Lifecycle.

Từ docs:

Lớn lên cho mỗi điều khiển và sau đó cho trang. Trong điều khiển, hãy sử dụng sự kiện này để thực hiện dọn dẹp lần cuối cho các điều khiển cụ thể, chẳng hạn như đóng các kết nối cơ sở dữ liệu điều khiển cụ thể . Đối với chính trang đó, hãy sử dụng sự kiện này để thực hiện công việc dọn dẹp lần cuối, chẳng hạn như đóng các tệp đang mở và kết nối cơ sở dữ liệu hoặc hoàn tất ghi nhật ký hoặc các tác vụ yêu cầu cụ thể khác.

Khi chuyển hướng đến một trang khác, tuy nhiên, phương pháp này có thể không được gọi.

+0

Điều này có liên quan gì đến việc điều hướng đến các trang khác? – mellamokb

+0

@mellamokbtheWise Ah, có vẻ như tôi đã đọc sai. Tôi sẽ chỉnh sửa câu trả lời. –

3

Unload xảy ra ở cuối yêu cầu *. Nó không có bất cứ điều gì để làm với điều hướng đến các trang khác. Các trang được "tải" và "không tải" trong suốt quá trình yêu cầu; lý do duy nhất nó xuất hiện khác là sự kỳ diệu mà các công cụ Web Forms làm đằng sau hậu trường.

Nếu bạn muốn xem đây là tải mới hay đăng lại, lớp Trang có một thuộc tính IsPostBack đúng khi có nội dung nào đó trong trang kích hoạt đăng lại trang đó. Nếu đó là sai, thì đây là yêu cầu mới và cần được xử lý phù hợp.

Ngoài ra, tôi không biết cách nào để thông báo khi ai đó cụ thể truy cập trang khác (không chỉ làm mới trang hiện tại), ngoài việc theo dõi trang cuối cùng được truy cập trong phiên.

* (Nó định nghĩa là sự kiện cuối cùng trong vòng đời của trang, nhưng có thể không bắn nếu yêu cầu được kết thúc sớm vì lý do nào. Chuyển hướng và chuyển là ví dụ điển hình.)

1

Liên kết này có thể sử dụng cho bạn: Page Life Cycle Overview. Mặc dù bạn không thể dựa vào các sự kiện đang chạy này là một hướng dẫn tốt để hiển thị thứ tự (và khi nào) chúng chạy.

0

Nếu bạn muốn nắm bắt sự kiện khi trang rời đi, bạn có thể sử dụng javascript để gọi phương thức máy chủ. Mặc dù điều này làm việc, nó không có vẻ như bạn có thể tạm dừng quá trình trong mã máy chủ. Kiểm tra chủ đề cuối cùng của tôi, tôi bắt đầu:

preventing page from being redirected

Trong đó, tôi gửi một ví dụ về cách sử dụng javascript để phát hiện trang được sắp rời khỏi và gọi một phương thức server trước khi điều đó xảy ra.