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
Tôi đã có câu hỏi này rất nhiều về cách đây một năm, tôi đã định cư quá nhiều so với các sự kiện On_X. Đây là bài viết tôi đọc về những ưu và khuyết điểm: http://weblogs.asp.net/infinitiesloop/archive/2008/03/24/onload-vs-page-load-vs-load-event.aspx
Có câu trả lời hay ở đây http://objectmix.com/dotnet/251824-oninit-page_init.html.
http://www.justskins.com/forums/page_init-and-page_load-59045.html có câu trả lời rõ ràng hơn.
Nếu AutoEventWireup được đặt thành false, bạn cần ghi đè OnInit vì Page_Init không tự động khả dụng.
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.
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 –
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.
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 đè! –
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." –
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.
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.
- 1. Sự kiện ASP.NET page_init?
- 2. Page_Load hoặc Page_Init
- 3. ASMX tương đương với Page_Init?
- 4. Application_Start so với OnInit so với constructor
- 5. Sử dụng sự kiện OnInit trong asp.net
- 6. Exec vs ExecWait vs ExecShell vs nsExec :: Exec vs nsExec :: ExecToLog vs nsExec :: ExecToStack vs ExecDos vs ExeCmd
- 7. ASP.NET - Điều khiển động được tạo trong Page_Pre_init() hoặc Page_Init() hoặc Page_Load()
- 8. J2ME VS Android VS iPhone VS Symbian VS Windows CE
- 9. bigtable vs cassandra vs simpledb vs dynamo vs couchdb vs hypertable vs riak vs hbase, họ có điểm gì chung?
- 10. ACE vs Boost vs Poco vs wxWidgets
- 11. NetSqlAzMan vs AzMan vs (?????)
- 12. & vs * và | vs +
- 13. Mathematica: Unevaluated vs Defer vs Hold vs HoldForm vs HoldAllComplete vs etc etc
- 14. Htmlentities vs addslashes vs mysqli_real_escape_string
- 15. Delegate.CreateDelegate vs DynamicMethod vs Biểu
- 16. RazorEngine vs RazorTemplates vs RazorMachine
- 17. HttpRequest vs HttpRequestMessage vs HttpRequestBase
- 18. getchar_unlocked() VS scanf() VS cin
- 19. gruntjs vs yeoman vs guard
- 20. Coroutine vs Continuation vs Generator
- 21. DataView.RowFilter Vs DataTable.Select() vs DataTable.Rows.Find()
- 22. Shmem vs tmpfs vs mmap
- 23. Processing.js vs. CAKE vs. Raphael.js
- 24. Mongoose.model vs Connection.model vs Model.model
- 25. MySQL vs Firebird vs SQLite
- 26. window.onload vs. body.onload vs. document.onready
- 27. Selenium vs. SimpleTest vs. WatiN
- 28. Matlab vs Aforge vs OpenCV
- 29. select vs poll vs epoll
- 30. fadeIn vs fadeOut vs fadeTo
Cảm ơn Nick! Đó là một bài viết hay. Tôi đang tìm kiếm một thứ như thế. Rất cảm kích. : =) –