Như bạn đã biết, có một số bộ xử lý Page_xxx
sự kiện, như Init
, Load
, Prerender
... sự kiện này tồn tại trong Controls, và Trang cũng như kiểm soát tài khoản (trong thực tế, họ đang có nguồn gốc hình thức Control
, nắm giữ tất cả những sự kiện này).
sự kiện này có liên quan đến ASP.NET Page Life Cycle
Nếu bạn đọc trang trỏ đến bởi liên kết này một cách cẩn thận, bạn sẽ hiểu khi sự kiện được kích hoạt. Vì vậy, nếu bạn ràng buộc trình xử lý sự kiện của bạn trong bất kỳ sự kiện vòng đời nào xảy ra trước khi các sự kiện được kích hoạt, nó được đảm bảo rằng trình xử lý sự kiện của bạn sẽ bị ràng buộc đúng lúc để được kích hoạt.
Đây là những bước vòng đời chính:
PreInit -> Init -> InitComplete -> PreLoad -> Load -> [Control events] ->
LoadComplete -> PreRender -> SaveStateComplete -> Render -> Unload
sự kiện Không phải tất cả trong số họ đã có liên quan, nhưng nếu đó là cần thiết, bạn có thể ghi đè lên OnXxx()
chức năng tương ứng, như OnPreInit()
. (Điều này thường chỉ được thực hiện trên các điều khiển máy chủ tùy chỉnh).
Bạn có thể liên kết các sự kiện trong Page_Init
hoặc Page_Load
, bởi vì các sự kiện kiểm soát được triggerd sau khi tải của tất cả các điều khiển đã hoàn tất. Bước Load
xảy ra theo cách từ trên xuống, đầu tiên trong Trang và sau đó đệ quy trong tất cả các nút điều khiển của trẻ em.
Sau khi kết thúc Load
, các sự kiện đầu tiên được kích hoạt là Sự kiện thay đổi, như TextChanged
hoặc SelectionChanged
. Sau đó, được kích hoạt tất cả các sự kiện khác, như Click
.
Nếu bạn ràng buộc các sự kiện trong PreRender hoặc Unload, chúng sẽ không được kích hoạt. Nếu bạn đã làm trong Init hoặc Load, họ sẽ.
Vì vậy nó có thể trông giống như nó an toàn để ràng buộc trong Init hoặc Load, nhưng đó là không đúng sự thật:
Nó có thể trông giống như không có lý do đặc biệt để gắn chúng trên Init
hoặc Load
, bởi vì họ sẽ được kích hoạt sau trong vòng đời của trang. Tuy nhiên, như ràng buộc được xác định trong các .aspx
xảy ra trong Init
, một lập trình viên sẽ mong đợi rằng tất cả các sự kiện đã bị ràng buộc trong sự kiện Load
. Điều gì sẽ xảy ra nếu lập trình viên này nêu lên một sự kiện kiểm soát trẻ em trong mã phía sau? Sự kiện Load
xảy ra đầu tiên trong thư mục gốc của cây điều khiển và trên tất cả các trẻ em, đệ quy. Vì vậy, vào thời điểm lập trình viên đang cố gắng nâng cao sự kiện kiểm soát trẻ em, nó sẽ không bị ràng buộc. Vì vậy, điều này sẽ không hoạt động như mong đợi. Điều này là quá đủ để xem xét không an toàn để ràng buộc các sự kiện trong sự kiện Load
. Đó là lý do tại sao bạn phải luôn ràng buộc các sự kiện trong Init
.
Nhìn vào sơ đồ này để xem thứ tự thực hiện của trang & trẻ em sự kiện: ASP.NET Page Life Cycle Diagram
bạn đang sử dụng bất kỳ khuôn khổ như MVC hoặc là này webforms ASP.Net? –
@JeremyThompson. trong MVC không có mã phía sau, cảm ơn Chúa! – gdoron
@JeremyThompson, webforms ... :) – walther