ASP.NET畫面跳轉(zhuǎn)實(shí)現(xiàn)及其傳值問題解決方案
畫面跳轉(zhuǎn)和傳值問題,一直以來都在困擾著剛剛接觸asp.net web應(yīng)用程序的開發(fā)者,現(xiàn)羅列跳轉(zhuǎn)方法和傳值方式供大家參考;因?yàn)槲冶旧韰⑴c的項(xiàng)目功能也比較單一,對(duì)此可能認(rèn)識(shí)比較狹隘,希望各位多給提示幫助我進(jìn)步。此文為我項(xiàng)目組新近員工解惑同時(shí)與各位交流共勉。
asp.net web畫面跳轉(zhuǎn)的方法如下:
1.Server.Execute
Server.Execute并不能完全算是畫面跳轉(zhuǎn)方法,它是實(shí)現(xiàn)動(dòng)態(tài)調(diào)用頁面并渲染其內(nèi)容反映到當(dāng)前頁面的方法,之所以放在這里是想與Server.Transfer等做一個(gè)比較。使用場(chǎng)景主要是有“包含”關(guān)系的頁面進(jìn)行動(dòng)態(tài)調(diào)用的時(shí)候,例如WebForm2.aspx作為WebForm1.aspx的一部分表示在后者的畫面中,則可通過在WebForm1適當(dāng)?shù)奈恢寐暶?lt; % Server.Execute("~/WebForm2.aspx") %>實(shí)現(xiàn)。
2.Server.Transfer
最節(jié)省資源的畫面跳轉(zhuǎn)方式,可保存前畫面的URL查詢字符串和表單信息,可在跳轉(zhuǎn)目標(biāo)畫面中使用PreviousPage查詢跳轉(zhuǎn)前畫面屬性。Server.Transfer過程中沒有發(fā)生HTTP請(qǐng)求,所以不會(huì)被HTTP Module和HTTP Handler捕捉到,無法寫處理器;其本質(zhì)是在服務(wù)器端直接進(jìn)行頁面“切換”,所以也就有客戶端URL顯示不正確,引發(fā)一系列的問題,如:URL相對(duì)路徑問題、Sitemap問題等。
3.Response.Redirect
此命令將直接在次返回到客戶端通過URL重定向到跳轉(zhuǎn)目標(biāo)頁面,比Server.Transfer多了一次客戶端和服務(wù)器端之間的往返,因?yàn)槭羌兇釻RL重定向無法保存前畫面狀態(tài),傳值一般使用URL查詢字符串或Session傳值。
4.PostbackUrl屬性
以HTTP POST方式請(qǐng)求下一個(gè)畫面,可以保存跳轉(zhuǎn)前畫面狀態(tài),問題是POST發(fā)生于客戶端,無法在服務(wù)器端實(shí)現(xiàn)驗(yàn)證和取消跳轉(zhuǎn)的邏輯。
5.HTML鏈接
URL重定向,缺點(diǎn)與PostbackUrl一樣發(fā)生在客戶端只能通過URL查詢字符串進(jìn)行傳值。
asp.net web畫面跳轉(zhuǎn)的傳值方法如下:
1.URL傳值
因?yàn)閁RL長度限制,所以無法傳送大量數(shù)據(jù)。對(duì)于敏感數(shù)據(jù)需要進(jìn)行加密。
2.表單HTTP POST傳值
以HTTP POST方式將表單屬性傳回到服務(wù)器端,能夠保存前畫面狀態(tài),可以通過PreviousPage屬性進(jìn)行查詢。
3.PreviousPage屬性傳值
其實(shí)就是使用Server.Transfer和HTTP POST方式的畫面跳轉(zhuǎn)會(huì)把表單內(nèi)容推送到服務(wù)器端,所以跳轉(zhuǎn)后可以通過此屬性獲得前畫面信息。
4.Session傳值
代價(jià)比較大的方式,需要注意Session變量的生命周期在不需要的時(shí)候顯式注銷對(duì)象;對(duì)于集群之間的數(shù)據(jù)共享有很好的解決方案,但是把Session變量保存在數(shù)據(jù)庫中要有慢25%的代價(jià),這就需要考慮Web服務(wù)器和數(shù)據(jù)庫服務(wù)器的性能。
以上,便介紹了asp.net web畫面跳轉(zhuǎn)的實(shí)現(xiàn)以及傳值問題的解決方法。
【編輯推薦】
- ASP.NET DetailsView中顯示選中產(chǎn)品的詳細(xì)信息
- ASP.NET 2.0數(shù)據(jù)教程:GridView選擇行
- ASP.NET 2.0數(shù)據(jù)教程:GridView顯示數(shù)據(jù)
- ASP.NET 2.0中添加GridView到頁面
- 新增ASP.NET頁面時(shí)的注意事項(xiàng)