2009-10-30 12 views
9

Phần vòng đời web là described như thế này:Tại sao thay đổi thứ tự OnLoad/CreateChildControls ở chế độ postback?

On tải trang

  1. Constructor
  2. OnInit
  3. onload
  4. phương pháp
  5. ConnectionConsumer được gọi là nếu phần web là khả năng kết nối
  6. CreateChildControls ...

On Postback 1st (PostBack nhấp handler đặt ViewState thông qua công tài sản)

  1. Constructor
  2. OnInit
  3. CreateChildControls
  4. xử lý onload
  5. PostBack nhấp chuột ...
.210

On Postback 2 (PostBack nhấp handler đặt ViewState thông qua công tài sản)

  1. Constructor
  2. OnInit
  3. LoadViewState
  4. CreateChildControls
  5. onload ...

Khi bạn c xem OnLoad và CreateChildControls thay đổi thứ tự của chúng. Điều này giới thiệu một số khó khăn trong mã của tôi khi tôi cần thu thập dữ liệu khác nhau mà tôi đã sử dụng để làm trong phần tử OnLoad.

Có lý do nào khiến đơn hàng bị thay đổi trong giai đoạn đăng lại không?

Trả lời

14

CreateChildControls được gọi bất cứ khi nào khung (hoặc chính bạn) gọi phương thức EnsureChildControls. Phương pháp này nên được gọi bất cứ khi nào bạn cần các điều khiển con ở đó.

Trong trường hợp của khung, nó muốn đặt giá trị được đăng giữa OnInit và OnLoad (để bạn có thể truy cập các giá trị trong khi tải). Bởi vì nó cần các điều khiển để làm điều này, nó sẽ gọi EnsureChildControls cho bạn.

Nếu không có postback, cũng không cần phải thiết lập các giá trị và do đó cuộc gọi đến EnsureChildControls sẽ đợi cho đến khi một khung thời gian cần các điều khiển. Điều này xảy ra giữa OnLoad và OnPreRender.

+0

Đó là một câu trả lời hay. – spa

-4

Điều đó không xảy ra, bạn có chắc chắn không? Không có chủ đề nào khác chạy có thể làm cho nó có vẻ như là thứ tự đã thay đổi?

Đây là sau khi tất cả chỉ ASP.NET, một chương trình được thực hiện bởi một máy tính (có nghĩa là nó phải luôn luôn làm những việc như nhau, không giống như một người).

+0

Có, tôi chắc chắn ... :-( – spa

+0

Đây không phải là bất kỳ điều gì mà tôi đã tự mình đưa ra. Nó được mô tả trong nhiều bài đăng trên blog khác nhau (xem liên kết trong câu hỏi) Tôi đã xác minh điều đó bằng trình gỡ lỗi – spa