近期的幾個ASP.NET開發經驗總結和收集(一)

來源:互聯網
上載者:User
一:頁面中Page_Load事件 和 Page.IsPostBack執行兩次的原因.
原因一:
當<%@Page....中沒有AutoEventWireup定義時會導致Page_Load執行兩次,如果有定義,且值為true時,在IsPostBack中動態繫結控制項等情況也會導致頁面Load事件發生兩次..因此,個人推薦不要忽視AutoEventWireup,且建議設定其值為 false;
原因二:
當頁面中有<img src="">時,也可能會導致Page_Load執行兩次,解決方案:我也唔知.

二:OnInit與OnLoad
個人理解:如果頁面禁用了視圖或者邏輯過程中沒有用到視圖或者沒有必要回傳資料的話,可以直接重寫OnLoad方法,而不用再寫OnInit方法,因為OnInit()之後還有進行一些視圖方法的操作及回傳資料的處理.因此直接OnLoad效率會高一些.

三:遠程伺服器返回500錯誤
過程中需要從遠程伺服器下載檔案到本地.可一直報遠程伺服器返回500錯誤.檢查來檢查去,結果錯誤發生在本地:
原因:頁面以ANSI編碼儲存,而本地完全路徑中有中文字元,導致路徑不能被程式有效識別.
解決方案:將頁面編碼更換成utf-8即可.VS系列中可通過進階儲存選項更改.

四:Response.End,Response.Redirect等導致"正在中止線程"的問題
如果是Response.End(),可用HttpContext.Current.ApplicationInstance.CompleteRequest()來代替(據個人測試,貌似使用這句後,後邊不能再有程式執行,否則仍然會繼續執行下去?)
對於Response.Redirect()可用其重載方法:Response.Redirect(string,bool)
當然,Server.Execute(),Server.Transfer()情況也類似.

附上ASP.NET頁面的生存周期(看明白了就知道為何有時只需要OnLoad,而不需要OnInit了)
____
一:初始化Init:初始化對象--Init事件(OnInit方法)
二:載入檢視狀態:LoadViewState方法
三:處理回傳資料:LoadPostData方法---實際上這一步只是載入,並沒有做其它的處理.
---實現該方法的控制項要繼承自IPostBackDataHandler介面,該介面有LoadPostData和RaisePostBackDataChangedEvent兩個方法
四:載入Load:---Load事件(OnLoad方法)---該過程中所有對象都已經被執行個體化了..
五:發送回傳更改通知:RaisePostBackDataChangedEvent方法
六:處理回傳事件:IPostBackEventHandler介面的RaisePostBackEvent方法.
七:預呈現:OnPreRender方法(PreRender事件)
八:儲存檢視狀態:SaveViewState方法
九:呈現:Render方法(--不再有對應事件)
十:處置,回收資源:Dispose方法
十一:卸載:UnLoad事件(OnUnLoad方法)..
---------Page是從Control繼承的,因此它也是一種特殊的控制項!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.