生活随笔
收集整理的這篇文章主要介紹了
【转帖】OnPreRender Render的区别
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
| 轉(zhuǎn)自:http://hi.baidu.com/trip008/blog/item/d6139ab77b5414f130add1e9.html protected override void OnPreRender(EventArgs e) protected override void Render(HtmlTextWriter writer) 這兩個的區(qū)別。可否告知
====================================================
asp.net頁面在觸發(fā)各個子控件的事件之后,會遞歸調(diào)用控件的OnpreRender,然后(注意)遞歸地將控件的ViewState序列化成一個字符串,最后遞歸調(diào)用控件的Render輸出結(jié)果(在最高層控件即page控件的Render就會把那個ViewState序列化字符串寫到輸出的html的隱藏字段中)。 因此,在Render中創(chuàng)建、改變的內(nèi)容即使寫入ViewState,其實也無法在頁面回發(fā)之后被恢復(fù),葉面回發(fā)之后回填的ViewState仍然是OnPreder或者之前的時候得值。 因此通常,控件的OnPrerender用來最控件的最后最后一次改變(動態(tài)生成),而在Render中僅僅用來輸出html而并不改變控件自身。
另外,控件在vs設(shè)計器中的時候,并不是page對象驅(qū)動頁面顯示的。雖然在設(shè)計其上看上去很像asp.net應(yīng)用程序處理頁面的結(jié)果。起碼,設(shè)計器并不調(diào)用OnPrerender,而是根據(jù)Designer標(biāo)簽中說明的方法來調(diào)用顯示邏輯。這樣你就可以讓控件在設(shè)計器中表現(xiàn)為與運行時不同的結(jié)果。例如表格控件在設(shè)計器中就不顯示所有綁定數(shù)據(jù),而是顯示自己創(chuàng)建的一組示例數(shù)據(jù),以便讓你有一個簡潔的方式設(shè)計界面布局,同時也讓連接數(shù)據(jù)庫等等只有在運行時才需要的費時、可能失敗的行為在設(shè)計時避免執(zhí)行。
這里我想到一個常見現(xiàn)象。很多人已經(jīng)會寫自定義控件了。但是其實只了解運行時的控制機制,寫出的自定義控件并不支持vs設(shè)計器的控制機制。例如這個OnPreRender在設(shè)計時并不被調(diào)用是很多人不知道的。精通編寫自定義控件的人,也許僅僅讓其以程序代碼的方式被使用,其編寫的自定義控件使用在RAD方式的時候并不好用,這是常見的。 |
轉(zhuǎn)載于:https://www.cnblogs.com/ziling8163/archive/2009/02/17/1392255.html
總結(jié)
以上是生活随笔為你收集整理的【转帖】OnPreRender Render的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。