2009-08-10 20 views
25

Giữa việc xử lý sự kiện Page_Init hoặc ghi đè phương thức OnInit của Trang, trang nào tốt hơn để sử dụng? Cảm ơn.Page_Init vs OnInit

Trả lời

10

Ghi đè phương thức của loại cơ sở là thích hợp hơn vì cuộc gọi ảo đơn giản và sạch hơn việc tạo đại biểu gắn sự kiện vào nhóm phương pháp.

Ngoài ra, dựa trên AutoEventWireup được đặt thành true có nghĩa là bạn đang giới thiệu chi phí phân tích mã trang của bạn là ASP.NET sẽ phải tạo bất kỳ đại biểu nào cho bạn tại thời điểm thực thi.

+2

Ngoài ra, bạn cũng có thể chọn khi nào và khi nào cũng gọi phương thức cơ bản - không thể làm điều đó với kiểu Page_Load –

3

Về cơ bản, không có sự khác biệt nào trong hai ứng dụng này. Đó là những gì được thực hiện trong OnInit trong lớp Page:

protected internal override void OnInit(EventArgs e) 
{ 
    base.OnInit(e); 
    if (this._theme != null) 
    { 
     this._theme.SetStyleSheet(); 
    } 
    if (this._styleSheet != null) 
    { 
     this._styleSheet.SetStyleSheet(); 
    } 
} 

Nếu chúng ta sẽ mở base.OnInit chúng tôi sẽ se rằng đó là nơi Page_Init là bắn:

protected internal virtual void OnInit(EventArgs e) 
{ 
    if (this.HasEvents()) 
    { 
     EventHandler handler = this._occasionalFields.Events[EventInit] as EventHandler; 
     if (handler != null) 
     { 
      handler(this, e); 
     } 
    } 
} 

Vì vậy, về cơ bản không có sự khác biệt trong hai cách tiếp cận này. Tuy nhiên, bạn cần gọi tới số base.OnInit trong phương thức được ghi đè của bạn nếu bạn chọn sử dụng ghi đè thay vì sự kiện. Và một sự khác biệt là nếu bạn đang sử dụng ghi đè, bạn có thể chạy một số mã ngay sau khi Chủ đề được áp dụng.

Trân trọng.

P.S. Điều duy nhất tôi khuyên bạn nên sử dụng cùng một cách tiếp cận trên tất cả các ứng dụng.

+0

Có - chỉ khi ghi đè phương pháp OnXXX bạn có lựa chọn WHEN để gọi phương thức cơ sở (hoặc thậm chí có hay không gọi phương thức đó). Điều này có vẻ hơi khó tính, nhưng trong một số trường hợp, điều này có thể rất quan trọng. Vì vậy, lời khuyên của tôi: luôn luôn ghi đè! –

+0

Và tôi đã đề cập đến khả năng đó - "Và một khác biệt nữa là nếu bạn đang sử dụng ghi đè, bạn có thể chạy một số mã ngay sau khi Chủ đề được áp dụng." –

0

OnX vì phần lớn nó là kỹ thuật ưu tiên để xử lý sự kiện trong lớp dẫn xuất theo MSDN.

1

OnInit là tốt hơn vì nó là khởi tạo cấp lớp trong khi trang init có thể có hiệu ứng thừa vì bạn phải kiểm tra xem đó có phải là postback hay không.

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