解讀ASP.NET 2.0跨網(wǎng)頁(yè)提交的三種方法_.Net教程
推薦:揭秘設(shè)計(jì)ASP.NET應(yīng)用程序的七大妙招隨著微軟.NET的流行,ASP.NET越來(lái)越為廣大開(kāi)發(fā)人員所接受。作為ASP.NET的開(kāi)發(fā)人員,我們不僅需要掌握其基本的原理,更要多多實(shí)踐,從實(shí)踐中獲取真正的開(kāi)發(fā)本領(lǐng)。在我們的實(shí)際開(kāi)發(fā)中,往往基本的原理滿足不了開(kāi)發(fā)需求,我們更多的要積累一些開(kāi)發(fā)技巧,本文就
當(dāng)在一個(gè)ASP.NET Web頁(yè)面中進(jìn)行操作時(shí),在默認(rèn)情況下向當(dāng)前頁(yè)進(jìn)行提交。這種行為在ASP.NET出現(xiàn)之前并沒(méi)有什么關(guān)系,但在ASP.NET中,當(dāng)我們想向另外一個(gè)Web頁(yè)提交一個(gè)Web Form時(shí)該如何做呢?在ASP.NET1.0中這個(gè)問(wèn)題變得很難解決,但在ASP.NET 2.0中為開(kāi)發(fā)人員提供了更容易的解決技術(shù):跨網(wǎng)頁(yè)提交。這種技術(shù)允許一個(gè)網(wǎng)頁(yè)在提交數(shù)據(jù)時(shí)提交給另外的一個(gè)頁(yè)面。在跨網(wǎng)頁(yè)提交中,用于初始化提交代碼的頁(yè)面叫源頁(yè)面,而客戶提交的頁(yè)面叫目標(biāo)頁(yè)面。
為了方便起見(jiàn),目標(biāo)頁(yè)面仍然獲得原頁(yè)面提交的所有數(shù)據(jù)。換名話說(shuō),從技術(shù)觀點(diǎn)出發(fā),我們可以用同樣的方式處理其他ASP.NET頁(yè)面提交的數(shù)據(jù)。
這個(gè)新特性意味著ASP.NET2.0開(kāi)發(fā)人員目前有三種可供選擇的技術(shù)來(lái)將數(shù)據(jù)從一個(gè)web頁(yè)面?zhèn)魉偷搅硗庖粋(gè)頁(yè)面。這三種方法是:響應(yīng)重定向,服務(wù)端傳輸和新的跨網(wǎng)頁(yè)提交特性。我們可以已經(jīng)熟悉前兩種技術(shù)了,因此,我們只是簡(jiǎn)要地復(fù)習(xí)一下它們,然后我們會(huì)將主要精力放到學(xué)習(xí)如何使用跨網(wǎng)頁(yè)提交特性,以及闡述一下這種方法和響應(yīng)重定向以及服務(wù)傳輸方式有什么不同。
一、響應(yīng)重定向方法
響應(yīng)重定向方法是目前為止將一個(gè)網(wǎng)頁(yè)重定向到另一個(gè)網(wǎng)頁(yè)的最簡(jiǎn)單的方法的最簡(jiǎn)單的方法。當(dāng)Web服務(wù)器接到一個(gè)重定向請(qǐng)求后,它會(huì)將一個(gè)響應(yīng)頭送給客戶端,這將導(dǎo)致客戶端發(fā)送一個(gè)新的請(qǐng)求到服務(wù)器。按句話說(shuō),一個(gè)重定向請(qǐng)求實(shí)際上是兩個(gè)請(qǐng)求響應(yīng):一個(gè)是最初的請(qǐng)求響應(yīng),另一個(gè)是新的重定向請(qǐng)求響應(yīng)。
在ASP.NET中實(shí)現(xiàn)重定向很容易。下面的代碼演示了如何使用Response.Redirect方法實(shí)現(xiàn)網(wǎng)頁(yè)重定向:
| 以下為引用的內(nèi)容: protected void Redirect_Click(object sender, EventArgs e) { Response.Redirect("menu.aspx"); } |
要注意的是重定向請(qǐng)求只是一個(gè)GET請(qǐng)求,這就意味著我們不能從源頁(yè)中通過(guò)重定向命令提交數(shù)據(jù)。但是我們可以在重定向中使用查詢字符串來(lái)傳遞數(shù)據(jù)。如下面代碼所示:
| 以下為引用的內(nèi)容: protected void Redirect_Click(object sender, EventArgs e) { Response.Redirect("menu.aspx?userName=" UserName.Text)); } |
上面的例子將一個(gè)查詢字符串作為參數(shù)傳遞給了Response.Redirect方法的目標(biāo)URL。我們可以通過(guò)如下的代碼獲得源數(shù)據(jù)!
| 以下為引用的內(nèi)容: protected void Page_Load(object sender, EventArgs e) { string userName = Request["userName"]; } |
二、服務(wù)器傳輸方法
和依賴于客戶端向另一個(gè)新頁(yè)發(fā)請(qǐng)求不同,服務(wù)器傳輸是一種服務(wù)器重定向技術(shù),這種技術(shù)通過(guò)簡(jiǎn)單的改變Web服務(wù)器所處理的代碼來(lái)達(dá)到請(qǐng)求一個(gè)新頁(yè)的目的。當(dāng)被請(qǐng)求頁(yè)和源頁(yè)面在同一個(gè)服務(wù)器時(shí),服務(wù)器傳輸要比Response.Redirect方法更有效,這是由于這種技術(shù)可以避免額外的開(kāi)銷,僅僅使用服務(wù)器的資源就可以進(jìn)行重定向。要注意的這種技術(shù)有一個(gè)副作用,在頁(yè)面進(jìn)行重定向時(shí),客戶端的URL仍然會(huì)保持源頁(yè)面的URL,這可能會(huì)使客戶認(rèn)為他們所獲得的數(shù)據(jù)是源頁(yè)面產(chǎn)生的。當(dāng)然,在大多數(shù)情況下,這不是問(wèn)題,但是這將使調(diào)試變得更困難。
Server.Transfer方法還可以保存初始頁(yè)的HttpContext。因此,目標(biāo)頁(yè)可以訪問(wèn)源頁(yè)面的值。我們可以使用FormsCollection屬性來(lái)從目標(biāo)頁(yè)面中獲得源頁(yè)面的值。首先,要確定我們使用了被重載的方法,這個(gè)方法有兩個(gè)參數(shù):目標(biāo)URL和一個(gè)Boolean類型的值,告訴服務(wù)器是否保存用于描述源頁(yè)面值的 Form。如下面的代碼所示:
Server.Transfer("Menu.aspx",true);
然后,我們?cè)谀繕?biāo)頁(yè)面中獲得一個(gè)叫txtUserName的Textbox控件的值的代碼如下:
| 以下為引用的內(nèi)容: object obj = Request.Form["txtUserName"]; |
三、Response.Redirect和Server.Transfer的比較
由于Response.Redirect方法要進(jìn)行兩次請(qǐng)求響應(yīng)操作,因此,我們應(yīng)該在對(duì)性能要求高的網(wǎng)站盡量避免使用這種方法。然而,只從技術(shù)上說(shuō),使用redirect方式確實(shí)可以從一個(gè)網(wǎng)頁(yè)跳到另一個(gè)網(wǎng)頁(yè)。相比之下,Server.Transfer會(huì)更有效率,但是跳轉(zhuǎn)的范圍僅限于同一個(gè)Web服務(wù)器的不同網(wǎng)頁(yè)。從本質(zhì)上說(shuō),我們可以使用Server.Transfer來(lái)消除不必要的請(qǐng)求響應(yīng)操作。如果我們需要重定位到不同服務(wù)器的網(wǎng)頁(yè),就需要使用Response.Redirect方法。
四、跨頁(yè)提交概述
在ASP.NET 2.0中,我們可以通過(guò)實(shí)現(xiàn)IbuttonControl接口提交給不同的WebForm,來(lái)實(shí)現(xiàn)跨網(wǎng)頁(yè)的提交。和Response.Redirect類似,跨網(wǎng)頁(yè)提交是一個(gè)基于客戶端的傳輸機(jī)制,但也有點(diǎn)象Server.Transfer,目標(biāo)網(wǎng)頁(yè)也可以訪問(wèn)源網(wǎng)頁(yè)的數(shù)據(jù)。為了使用跨網(wǎng)頁(yè)提交,我們需要在源網(wǎng)頁(yè)中的PostBackUrl屬性中指定目標(biāo)URL。
五、實(shí)現(xiàn)跨網(wǎng)頁(yè)提交
這部分將討論一下如何在 ASP.NET2.0中實(shí)現(xiàn)跨網(wǎng)頁(yè)提交。為了開(kāi)始我們的學(xué)習(xí),假設(shè)有兩個(gè)Web頁(yè),一個(gè)是源Web頁(yè),另一個(gè)是目標(biāo)Web頁(yè)。在源網(wǎng)頁(yè)中初始化了使用按鈕進(jìn)行的跨網(wǎng)頁(yè)提交操作。我們首先必須設(shè)置目標(biāo)網(wǎng)頁(yè)按鈕的PostBackUrl屬性,順便說(shuō)一句,所有實(shí)現(xiàn)了
System.Web.UI.WebControls.IbuttonControl接口的Web控件都有跨網(wǎng)頁(yè)提交的特性。下面的代碼將演示這一過(guò)程。
| 以下為引用的內(nèi)容: PostBackUrl="~/target.aspx" text = "Post to a target page"/> |
當(dāng)我們?cè)O(shè)置PostBackUrl屬性時(shí),ASP.NET框架將相應(yīng)的控件綁定到一個(gè)新的叫WebForm_DoPostBackWithOptions的JavaScript函數(shù),產(chǎn)生的Html代碼如下:
| 以下為引用的內(nèi)容: onclick="javascript:WebForm_DoPostBackWithOptions( new WebForm_PostBackOptions("btnSubmit", "", false, "", "Target.aspx", false, false))" id="btnSubmit" /> |
對(duì)于上面的html代碼來(lái)說(shuō),當(dāng)用戶單擊按鈕時(shí),瀏覽器將提交目標(biāo)URL(Target.aspx),而不是源URL。
分享:解析Web開(kāi)發(fā)模式的顛覆者:ASP.NET MVC2008年3月微軟針對(duì)ASP.NET 3.5發(fā)布的MVC框架(Preview 2 版本)是一個(gè)真正意義上的ASP.NET MVC框架。至今,短短4個(gè)月內(nèi)此框架已經(jīng)發(fā)展到Preview 4版本。許多國(guó)內(nèi)外業(yè)界人士稱該框架為其前基于Web表單開(kāi)發(fā)模式的歷史性顛覆。本文站在對(duì)ASP.NET MVC框架與傳統(tǒng)AS
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實(shí)例(可帶附件)
- js實(shí)現(xiàn)廣告漂浮效果的小例子
- asp.net Repeater 數(shù)據(jù)綁定的具體實(shí)現(xiàn)
- Asp.Net 無(wú)刷新文件上傳并顯示進(jìn)度條的實(shí)現(xiàn)方法及思路
- Asp.net獲取客戶端IP常見(jiàn)代碼存在的偽造IP問(wèn)題探討
- VS2010 水晶報(bào)表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(kù)(連接字符串的配置及獲取)
- asp.net頁(yè)面?zhèn)髦禍y(cè)試實(shí)例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲(chǔ)過(guò)程實(shí)現(xiàn)分頁(yè)示例代碼
.Net教程Rss訂閱編程教程搜索
.Net教程推薦
- 談.NET 3.5 SP1 X64與HTTP Error 503
- ASP.NET立即上手教程(2)
- .NET中加密與解密QueryString的方法
- ASP.NET站點(diǎn)RSS功能實(shí)現(xiàn)方法
- 菜鳥(niǎo)也學(xué)習(xí)ASP.NET如何讀取數(shù)據(jù)庫(kù)內(nèi)容
- 淺談ASP.NET中使用AJAX的簡(jiǎn)單方法
- 怎樣處理.NET開(kāi)發(fā)事件
- Asp.net ajax實(shí)現(xiàn)任務(wù)提示頁(yè)面
- 10條ASP.NET編程經(jīng)驗(yàn)技巧
- AJAX將成為移動(dòng)Web2.0時(shí)代首選開(kāi)發(fā)平臺(tái)
- 相關(guān)鏈接:
- 教程說(shuō)明:
.Net教程-解讀ASP.NET 2.0跨網(wǎng)頁(yè)提交的三種方法
。