2010-09-21 38 views
10

Thông thường tôi sử dụng nó khi tôi truy cập vào một thuộc tính của điều khiển tổng hợp phụ thuộc vào điều khiển con. Nhưng tôi cũng đã thêm nó vào OnInit của một điều khiển để tôi có thể chắc chắn rằng một lĩnh vực ẩn đã được thêm vào một cách chính xác. Chỉ một phút trước, tôi đã gọi nó trong RenderControl vì tôi gặp sự cố khi hiển thị một bộ mở rộng lịch và nó đã sửa nó. Tôi bắt đầu nhận được một chút bối rối khi tôi cần và khi tôi không cần phải gọi EnsureChildControls và khi tôi nên gọi nó. Mọi con trỏ đều được chào đón. Cảm ơn!Việc sử dụng thích hợp của EnsureChildControls() là gì?

+5

câu hỏi này làm cho tôi hạnh phúc tôi đã học MVC :) – fearofawhackplanet

Trả lời

6

Trình kích hoạt EnsureChildControls CreateChildControl nếu nó chưa được kích hoạt trước đó. Điều này phải được thực hiện chỉ một lần trong vòng đời của trang. Tôi gọi nó là vô điều kiện trong OnInit/Page_Init và không có nơi nào khác. Nơi này có lợi thế là các điều khiển được tạo trước khi ASP.NET tải ViewState. Nếu bạn sử dụng ViewState hoặc ControlState, nó là cần thiết để tạo các điều khiển con sớm.

+0

Sẽ gọi nó trong OnInit loại bỏ sự cần thiết phải gọi nó trong thuộc tính nếu tài sản truy cập một cái gì đó như TextBox1.text? – Mike

+0

Nói chung tôi nói "có", nhưng chi tiết nó phụ thuộc vào cách sử dụng của bạn. Nếu bạn gọi hàm EnsureChildControls trong OnInit thì an toàn để truy cập các điều khiển (thông qua các thuộc tính hoặc cách khác) mà không cần gọi lại nó trong tất cả các giai đoạn tiếp theo của vòng đời trang (Load, Postback Events, Render,…) Nếu bạn dựa vào ViewState cách sử dụng duy nhất. –

0

Phương thức EnsureChildControls đảm bảo các điều khiển con được tạo trước khi truy cập chúng. Bất cứ lúc nào bạn viết các điều khiển tổng hợp, bạn muốn xây dựng các điều khiển bên trong các sự kiện CreateChildControls, sau đó gọi EnsureChildControls trước khi truy cập chúng để đảm bảo tất cả các điều khiển đã được tạo để bạn không nhận được một ngoại lệ tham chiếu null.

Các vấn đề liên quan