2010-09-15 52 views
2

我google一下Page_preRender我們如何使用Page_PreRender而不是Page_Load中或可能是什麼地方,我們不能使用的Page_Load,並有使用Page_PreRender但我每次找地方,什麼樣的代碼只能在Page_PreRender事件中寫入?

The point at which the objects are prerendered is the last time changes to the objects can be saved or persisted to viewstate. This makes the PreRender step a good place to make final modifications, such as changing properties of controls or changing Control Tree structure, without having to worry about ASP.NET making changes to objects based off of database calls or viewstate updates. After the PreRender phase those changes to objects are locked in and can no longer be saved to the page viewstate. The PreRender step can be overridden using OnPreRender」的情況。

但我不明白哪種改變是我們在page_Load中無法做到的,必須在PreRender中完成。

據我所知,在Page_PreInit上我們可以動態地創建控件,更改或分配我們在page_Load或Init之後無法使用的MasterPage或Theme。

但是,Page_PreRender是什麼,我們只能在Page_PreRender中做什麼。

回答

0

Page_Load事件後會觸發某些事件。有些顯而易見,其他則不明顯。這是因爲這些事件只能在娛樂之後執行(或者在加載之後)。例如,如果你想註冊一個客戶端腳本,那麼這個好地方可能是Page_Render。或者您可能有意調用Page_Load來驗證控件的Page.validate方法可以被理解爲在渲染階段已經被調用。

同樣某些只有當它們的關聯控件已經準備好呈現的時候才能工作(完全由用戶的瀏覽器處理)。

+0

謝謝,但「如果你想註冊一個客戶端腳本,這個好地方可能是Page_Render。「爲什麼不Page_Load – Azhar 2010-09-15 13:21:05

+0

考慮」Page_Load「作爲使組件存在,然後使用該組件的客戶端腳本顯然只能在」Page_Load「之後註冊,因此後期階段...預渲染和渲染。 – loxxy 2010-09-15 15:09:58

0

這不是你可以只做Page_PreRender什麼問題,有可能是你的控件之間的相關性在所有的事件在Page_Load中被處理,只有變得明顯。

+0

那麼情況會是怎樣? – Azhar 2010-09-15 12:35:54

+0

@Azhar - 如果您需要進行更改,以後所有事件都會被解僱,這就是這個地方。 – Oded 2010-09-15 12:39:56

+0

@Oded:謝謝,請你能指出這些可能是什麼樣的變化? – Azhar 2010-09-15 13:24:03

0

Page_PreRender事件可用於指定對控件的html呈現所做的更改。 Load和PreRender之間的一個重要區別是Load在控件事件觸發之前運行,PreRender在控件事件之後被調用。因此,如果基於您的控件事件代碼您想要更改輸出html,您可以在PreRender事件中執行此操作。

另一個需要注意的重要事項是Page對象引發Page對象上的PreRender事件,然後遞歸地爲每個子控件執行相同操作。個別控件的PreRender事件發生在頁面的PreRender事件之後。所以,這給你增加了如何修改特定控件的渲染的槓桿作用。這在Page_Load中是不可能的。

如果您使用自定義/用戶控件來完成控件的呈現,那麼也可以使用它。

+0

謝謝,但對於「這給你增加了如何修改特定控件的渲染的槓桿作用」,你可以舉一些例子。 – Azhar 2010-09-15 12:54:04

+0

一個簡單的例子可能是,如果點擊按鈕將會話變量設置爲新值,您將無法在加載中看到新值,但您會在PreRender中看到新值。基於此值,您可以更改標籤或使用該控件執行其他操作。 – 2010-09-15 13:43:18

+0

在gridview控制的情況下,我「認爲」更新的值(由於網格命令修改 - 更新等)在加載時不可用。如果您願意,您可以在此處更改排序/篩選等。請檢查一下這個,因爲我不是100%確定的。 – 2010-09-15 13:45:05

相關問題