[英]Pitfalls of using LoadControl in the Load event
我在Load事件中廣泛使用LoadControl方法。 但是我還沒有觀察到任何問題,我擔心MSDN文檔說了些什么:
當您將控件加載到容器控件中時,容器會引發所有添加的控件的事件,直到它趕上了當前事件為止。 但是,添加的控件無法趕上回發數據處理 。 為了使添加的控件參與回發數據處理(包括驗證),必須在Init事件中而不是Load事件中添加該控件。
這到底是什么意思?
在Load事件中加載控件時,還有其他陷阱嗎?
MSDN文檔的那部分(大部分)是錯誤的。 正如您所發現的,即使您在Load
事件中動態添加控件,回發數據處理和驗證也可以工作。
以下是與此問題相關的ASP.NET頁面生命周期的各個階段:
Init
事件。 Load
事件。 當文檔說“添加的控件未趕上回發數據處理”時,該文檔是正確的。 但是它忽略了以下事實:有兩次嘗試加載過帳的表單數據,一次是在Load
事件之前,一次是在事件之后。 因此,如果在Load
事件中動態添加控件,則在發生回發事件(例如submitButton_Click
)時, 將使用發布的表單數據填充該submitButton_Click
。
據我所知,這是主要的區別和潛在的陷阱:
Init
動態添加控件,則可以在Load
訪問其發布的表單數據。 Load
動態添加控件,則必須等到回發事件(否則直接訪問HttpRequest.Form
集合)。 這意味着在Control_Load
執行時,回發周期已經過去和消失。 如果您有一個需要參與回發的控件,則需要在之前加載它,因此這就是文檔建議改為在Init
覆蓋中進行的原因。
如果您的控件不參與回發,那么您就可以了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.