2009-10-31 20 views
16

Gần đây tôi đã học cách viết WebControls của riêng mình, nhưng tôi vẫn còn mơ hồ về sự khác biệt giữa Render và RenderControl. Tôi bắt đầu bằng cách sử dụng Render, nhưng tại một số điểm tôi bắt đầu sử dụng RenderControl, mà bây giờ tôi sử dụng độc quyền. Nếu tôi đang hình thành thói quen xấu, tôi muốn nhét nó vào chồi ngay trước khi tôi bị cản trở.Sự khác nhau giữa Render và RenderControl trong quá trình tạo WebControl là gì?

Trả lời

5

RenderControl được sử dụng nếu có điều khiển hiện tại cung cấp những gì bạn muốn để bạn có thể tận dụng lợi thế của cách được hiển thị.

Kết xuất được sử dụng nếu bạn cần kiểm soát hoàn toàn cách html được hiển thị.

Bạn có thể dĩ nhiên kết hợp hai cho việc sử dụng tối ưu nhất về thời gian lập trình của bạn ...

2

RenderControl được sử dụng cho trang để hiển thị điều khiển con. Render cho phép một điều khiển riêng lẻ tự render.

17

Dưới đây là một đọc tốt: Render vs RenderControl

Trích từ liên kết:

Phương pháp Render cho phép bộ điều khiển để render bản thân bằng cách viết ra HTML để dòng phản ứng. Điều này chuyển một tham chiếu đến đối tượng HTMLTextWriter, có thể viết trực tiếp vào luồng phản hồi. Phương pháp này nên được sử dụng khi bạn lấy được trực tiếp từ điều khiển.

Phương pháp RenderControl được sử dụng bởi trang để làm cho mỗi cá nhân kiểm soát. Nó cho phép người tiêu dùng của lớp học của bạn hiển thị nó và bạn có thể sử dụng nó để hiển thị điều khiển con nếu bạn đang sử dụng điều khiển tổng hợp. Ngoài ra, một điều cần lưu ý là này sẽ không được gọi nếu chế độ hiển thị thuộc tính trên điều khiển được đặt thành sai.

6

Render là một phương pháp bảo vệ, có nghĩa là lớp duy nhất có nguồn gốc có thể truy cập vào nó. Nó được gọi trong vòng đời sự kiện và không được gọi rõ ràng trong mã của bạn.

RenderControl là phương thức công khai cho phép bạn gọi phương thức Render khi bạn muốn. Bạn sẽ sử dụng nó trong, ví dụ, một Custom Control nơi bạn lưu trữ các Controls trong ControlsCollection nhưng muốn Render chúng trong ô của chính chúng trong một bảng. Ví dụ:

 
    writer.Write(""): 
    foreach(Control ctl in Controls) 
    { 
     writer.Write("") 
     ctl.RenderControl(writer); 
     writer.Write(""); 
    } 
    writer.Write(""); 

Bạn nên luôn luôn ghi đè Render, và không RenderControl, vì nó được gọi trong tổ chức sự kiện Vòng đời (như tôi đã nói)

(từ http://forums.asp.net/t/909220.aspx/1, xin lỗi câu trả lời của tôi chỉ là một là sao chép và dán từ đó, nhưng tôi không thấy nhiều điểm viết lại lời giải thích rõ ràng như vậy)

Tôi vẫn không hiểu tại sao MS không đơn giản làm cho Render() là phương thức công khai. Tại sao một RenderControl riêng biệt() cần thiết?Lý do cho điều đó là mất tích từ tất cả các câu trả lời được đưa ra cho đến nay. Người đầu tiên có thể giải thích nó nhận được một upvote sáng bóng.

+0

+1 để biết chi tiết một số bit khó hiểu về hệ thống. Giúp vẽ một bức tranh đầy đủ hơn cho tôi. –

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