999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

淺析ASP.NET頁面導(dǎo)航技術(shù)

2010-06-06 07:18:42劉洪坡李金鎖
關(guān)鍵詞:頁面方法

劉洪坡,李金鎖,石 磊

(河南工業(yè)職業(yè)技術(shù)學(xué)院,河南 南陽 473000)

ASP.NET是微軟提供的Web應(yīng)用程序開發(fā)平臺,為建立和部署企業(yè)級Web應(yīng)用程序提供了服務(wù)。對Web應(yīng)用程序開發(fā)而言,在各個頁面之間自由地跳轉(zhuǎn)是最基本的要求。ASP.NET為頁面導(dǎo)航提供了多種技術(shù),這些技術(shù)之間有細(xì)微的差別,要對它們有一個系統(tǒng)的認(rèn)識和了解才能發(fā)揮其各自優(yōu)勢。了解頁面導(dǎo)航的原理,明確各技術(shù)的優(yōu)缺點,根據(jù)需要靈活選擇適合的導(dǎo)航技術(shù)對Web應(yīng)用程序開發(fā)來說非常重要。

1 超級鏈接

從一個頁面導(dǎo)航到另外一個頁面最簡單的方式是使用超級鏈接,在ASP.NET中,既支持標(biāo)簽,又提供了一個Web服務(wù)器控件(HyperLink控件)來實現(xiàn)超級鏈接。

1.1 標(biāo)簽

標(biāo)簽是Web應(yīng)用程序開發(fā)中最常用的一種導(dǎo)航方法,其用法如:,當(dāng)用戶點擊“進入WebForm2”超級連接時,頁面將被導(dǎo)航到WebForm2.aspx。由于其runat屬性被設(shè)置為server,所以可以在服務(wù)器端用編程的方式改變其導(dǎo)航目標(biāo),如:Link1.href="WebForm3.aspx"。

1.2 Hyperlink控件

Hyperlink控件是用NavigateUrl屬性來指定要導(dǎo)航到的頁面的Url地址,其用法如:進入 WebForm2,當(dāng)用戶點擊“進入WebForm2”超級鏈接時,WebForm2.aspx頁面執(zhí)行并將結(jié)果發(fā)送回瀏覽器。由于其在服務(wù)器端運行,所以可以用代碼修改其NavigateUrl屬性,從而實現(xiàn)目標(biāo)頁面可動態(tài)變化的超級鏈接,如:HyperLink1.NavigateUrl="~/WebForm3.aspx",該語句執(zhí)行后,頁面被導(dǎo)航到WebForm3.aspx。使用 Hyperlink 控件,也可以導(dǎo)航到其他網(wǎng)站上的頁面。

使用超級鏈接實現(xiàn)頁面導(dǎo)航,主要用于由用戶來決定何時跳轉(zhuǎn)頁面,可以用程序來控制導(dǎo)航目標(biāo)。

2 跨頁面提交

ASP.NET從2.0開始,引入了一種新的數(shù)據(jù)提交方法:Cross-Page技術(shù),即PostBack觸發(fā)在另一個頁面。支持此技術(shù)的是一個名為PostBackUrl的屬性,用于指定所發(fā)送到的Url地址,該屬性由IButtonControl接口定義,實現(xiàn)該接口的控件,如ImageButton、LinkButton、Button,都擁有此屬性。將PostBackUrl屬性設(shè)置為要導(dǎo)航到的頁面Url地址,如:當(dāng)用戶單擊"Button1"按鈕時,頁面將被提交到WebForm2,從而實現(xiàn)頁面導(dǎo)航。該技術(shù)不能導(dǎo)航到其他網(wǎng)站上的頁面。

3 編程實現(xiàn)頁面導(dǎo)航

在用ASP.NET開發(fā)Web應(yīng)用程序的過程中,有時需要實現(xiàn)頁面自動導(dǎo)航,要實現(xiàn)此功能,可使用ASP.NET提供的內(nèi)部對象 Response和Server以編程的方式加以解決。根據(jù)導(dǎo)航操作發(fā)生的位置不同分為客戶端導(dǎo)航、服務(wù)端導(dǎo)航兩種方式。

3.1 客戶端導(dǎo)航

Response.Redirect方法導(dǎo)航操作發(fā)生在客戶端,導(dǎo)航機制是:首先發(fā)送一個Http響應(yīng)到客戶端,通知客戶端跳轉(zhuǎn)到一個新的頁面,然后客戶端再發(fā)送頁面導(dǎo)航請求到服務(wù)器端,Web服務(wù)器執(zhí)行目標(biāo)頁面,并把執(zhí)行結(jié)果發(fā)送回客戶端,其用法如:Response.Redirect("~\WebForm2.aspx"),該代碼執(zhí)行后,將被導(dǎo)航到WebForm2頁面。使用Response.Redirect方法實現(xiàn)頁面導(dǎo)航后,客戶端瀏覽器地址欄的Url地址將變?yōu)槟繕?biāo)頁面,原始頁面進行的處理全部丟棄,其內(nèi)部控件保存的所有信息將丟失,所以不能訪問原始頁面提交的數(shù)據(jù),但我們可以使用Session、Cookies、Application等對象進行頁面間數(shù)據(jù)的傳遞。該方法與Web服務(wù)器進行了兩次通信,一次是對原始頁面的請求,另一次是對目標(biāo)頁面的請求,所以響應(yīng)速度較慢。在把查詢字符串作為Url地址的一部分進行導(dǎo)航時,如果查詢字符串包含有漢字,需要先進行編碼格式的轉(zhuǎn)換,如:string message=Server.UrlEncode("查詢漢字"),否則將會出現(xiàn)亂碼。使用 Response.Redirect方法既可以導(dǎo)航到當(dāng)前Web服務(wù)器中的資源,又可以導(dǎo)航到其他服務(wù)器上的資源,可以導(dǎo)航到任何頁面,沒有站點頁面限制,但不能跳過Web應(yīng)用程序登錄保護。

Response.Redirect方法主要用于需要將查詢字符串作為Url的一部分傳遞給目標(biāo)頁面時使用,或者導(dǎo)航到HTML頁面。

3.2 服務(wù)端導(dǎo)航

3.2.1 Server.Transfer

Server.Transfer方法導(dǎo)航操作發(fā)生在服務(wù)器端,服務(wù)器將執(zhí)行流程轉(zhuǎn)入同一Web服務(wù)器上的另一個aspx頁面進行處理,從而實現(xiàn)了同一Web服務(wù)器上aspx頁面間的導(dǎo)航(但不涉及到登錄),同時將頁面的控制權(quán)移交給目標(biāo)頁面,這時Web服務(wù)器并沒有丟棄原始頁面的處理結(jié)果,只是把進行了一半的處理轉(zhuǎn)到目標(biāo)頁面,其用法如:Server.Transfer("~\WebForm2.aspx")。由于這種導(dǎo)航操作是在服務(wù)器端進行的,瀏覽器不知道頁面已經(jīng)發(fā)生了跳轉(zhuǎn),所以導(dǎo)航之后瀏覽器地址欄中的Url地址不變,而頁面內(nèi)容已經(jīng)發(fā)生了變化,但頁面跳轉(zhuǎn)過程中Request、Session等對象保存的信息不變,導(dǎo)航之后可以繼續(xù)使用原始頁面提交的數(shù)據(jù)。Server.Transfer方法直接在服務(wù)器端執(zhí)行頁面導(dǎo)航,避免了不必要的網(wǎng)絡(luò)通信,處理速度快,從而獲得了更好的性能和瀏覽效果,但此方法不能導(dǎo)航到其他Web服務(wù)器頁面,只能在同一站點下實現(xiàn)頁面導(dǎo)航,而且能夠跳過登錄保護。

為了演示Server.Transfer方法的導(dǎo)航原理,新建一個WebForm1頁面,在WebForm1上添加一個Button1命令按鈕,并將Button1的Text屬性設(shè)置為“導(dǎo)航到WebForm2”,其Button1_Click事件代碼為:Server.Transfer("~\WebForm2.aspx"),如圖1所示。再添加一個WebForm2頁面,在WebForm2上添加一個Label1標(biāo)簽,并將Label1的Text屬性設(shè)置為“WebForm2頁面”。將WebForm1設(shè)置為起始頁,啟動Web應(yīng)用程序,單擊WebForm1上的Button1按鈕,可以看到瀏覽器的地址欄和標(biāo)題均沒有發(fā)生變化,而頁面內(nèi)容已經(jīng)改變,如圖2所示。

圖1 Server.Transfer方法執(zhí)行前頁面

圖2 Server.Transfer方法執(zhí)行后頁面

Server.Transfer方法主要用于需要將執(zhí)行流程轉(zhuǎn)到同一Web服務(wù)器上的另一aspx頁面時,其最大的特點是Url仍然是跳轉(zhuǎn)前的頁面的Url地址,跳轉(zhuǎn)后保留了Request和Session對象中的值,可以繼續(xù)使用導(dǎo)航前原始頁面的數(shù)據(jù)。

3.2.2 Server.Execute

Server.Execute方法將執(zhí)行同一Web服務(wù)器上的目標(biāo)頁面,它并沒有打斷Web服務(wù)器對原始頁面的處理過程,而是開啟另外一個線程來處理目標(biāo)頁面,執(zhí)行完畢后不改變原始頁面的位置,捕獲目標(biāo)頁面的輸出結(jié)果,然后將結(jié)果插入原始頁面的應(yīng)答流中,最終的效果是將原始頁面和目標(biāo)頁面兩個頁面的輸出結(jié)果合二為一,或者在原始頁面指定的位置輸出目標(biāo)頁面的結(jié)果。其用法一:Server.Transfer("~\WebForm2.aspx"),該語句執(zhí)行完畢,將WebForm2頁面的輸出追加到原始頁面的輸出流中。用法二:System.IO.StringWriter WR=new System.IO.StringWriter(),Server.Execute(" ~\WebForm2.aspx",WR),Label1.Text=WR.ToString(),上述三語句執(zhí)行完畢,將WebForm2頁面的輸出結(jié)果在Label1標(biāo)簽中顯示,采用這種方式使用該方法,可以在原始頁面中方便地調(diào)整目標(biāo)頁面輸出結(jié)果的位置。Server.Execute方法類似于針對aspx頁面的一次函數(shù)調(diào)用,目標(biāo)頁面能夠訪問原始頁面的表單數(shù)據(jù)和查詢字符串集合。

為了說明Server.Execute方法的執(zhí)行流程,新建一個WebForm1頁面,在WebForm1上添加一個Label1標(biāo)簽,并將 Label1的 Text屬性設(shè)置為“WebForm1頁面”,添加一個Button1命令按鈕,并將Button1的Text屬性設(shè)置為“導(dǎo)航到WebForm2”,如圖3所示,其Button1_Click事件處理過程如下:

添加一個WebForm2頁面,在WebForm2上添加一個Label1標(biāo)簽,并將Label1的Text屬性設(shè)置為“WebForm2頁面”。將WebForm1設(shè)置為起始頁,啟動Web應(yīng)用程序,單擊WebForm1上的Button1按鈕,WebForm1頁面上Label1標(biāo)簽的內(nèi)容被替換成WebForm2頁面上Label1標(biāo)簽的內(nèi)容,如圖4所示。

圖3 Server.Execute方法執(zhí)行前頁面

圖4 Server.Execute方法執(zhí)行后頁面

該方法常用于需要將目標(biāo)頁面的輸出結(jié)果插入到原始頁面的時候,而且多數(shù)情況下是在表格中將某目標(biāo)頁面用類似于嵌套的方式插入原始頁面。

4 頁面導(dǎo)航方法比較

(1)標(biāo)簽和Hyperlink控件在頁面上顯示為超級鏈接,由用戶決定頁面導(dǎo)航的時機。標(biāo)簽的href屬性和Hyperlink控件的NavigateUrl屬性在服務(wù)器端可以通過編程的方式重新設(shè)定,從而實現(xiàn)可動態(tài)變化的超級鏈接。

(2)跨頁面提交技術(shù)利用實現(xiàn)IButtonControl接口的按鈕的PostBackUrl屬性指定導(dǎo)航的目標(biāo)頁面,只能在同一個站點下實現(xiàn)頁面導(dǎo)航。

(3)Response.Redirect方法瀏覽器要和服務(wù)器進行兩次通信,響應(yīng)速度比較慢,但它可以導(dǎo)航到任何頁面,沒有站點頁面限制。由于它不能跳過Web應(yīng)用程序登錄保護,導(dǎo)航后原始頁面內(nèi)部控件保存的所有數(shù)據(jù)信息將丟失,因此,需要利用Session、Cookies、Application 等對象進行頁面數(shù)據(jù)的傳遞。

(4)Server.Transfer方法瀏覽器與服務(wù)器只進行一次通信,速度較快,但必須在同一站點下進行頁面導(dǎo)航。導(dǎo)航發(fā)生在服務(wù)器端,導(dǎo)航后瀏覽器的地址欄仍然保留原始頁面的Url,使用該方法能夠跳過Web應(yīng)用程序登錄保護。

(5)Sever.Execute方法類似于函數(shù)的一次調(diào)用,原始頁面不會中斷執(zhí)行,而是創(chuàng)建一個新的線程來處理目標(biāo)頁面,并把目標(biāo)頁面的輸出結(jié)果返回給原始頁面。該方法也必須在同一站點進行頁面導(dǎo)航。

5 頁面導(dǎo)航方法總結(jié)

ASP.NET給我們提供了多種頁面導(dǎo)航方法和技術(shù),在用ASP.NET開發(fā)Web應(yīng)用程序時,應(yīng)該在適當(dāng)?shù)臅r候選擇合適的導(dǎo)航方法和技術(shù),其一般原則如下:

(1)如果要讓用戶來決定何時進行頁面導(dǎo)航以及導(dǎo)航到哪一個頁面,或者要用程序來控制導(dǎo)航的目標(biāo),但導(dǎo)航的時機由用戶來決定,超級鏈接最適合。

(2)如果要把用戶導(dǎo)航到另一臺服務(wù)器上的資源,或者把用戶導(dǎo)航到非aspx資源,或者要將查詢字符串作為Url的一部分進行傳遞時,使用Response.Redirect方法最適合。

(3)如果要將程序執(zhí)行流程轉(zhuǎn)入同一Web服務(wù)器上的另一個aspx頁面,使用Server.Transfer方法最合適,導(dǎo)航操作在服務(wù)器上進行,減少了網(wǎng)絡(luò)通信,提高了響應(yīng)速度,從而能夠獲得更好的性能和瀏覽效果。

(4)如果要捕獲目標(biāo)頁面的輸出結(jié)果,并將結(jié)果插入原始頁面的特定位置,則應(yīng)使用Server.Execute方法。

(5)如果要確保HTML輸出的合法性,最好使用Response.Redirect方法,不要使用Server.Transfer或Server.Execute方法,因為Server.Execute或Server.Transfer方法返回給客戶端的頁面包含多個、標(biāo)記,不合法的HTML頁面,在有些瀏覽器中可能會發(fā)生錯誤。

[1]余金山,林慧,王濤.Asp.NET 3.5網(wǎng)站開發(fā)全程推演與視頻精講[M].北京:電子工業(yè)出版社,2009.

[2]李千目,嚴(yán)哲.ASP.NET程序設(shè)計與應(yīng)用開發(fā)[M].北京:清華大學(xué)出版社,2009.

[3]田洪云,ASP.NET頁面跳轉(zhuǎn)方法研究[J].科技信息,2006(12).

猜你喜歡
頁面方法
微信群聊總是找不到,打開這個開關(guān)就好了
大狗熊在睡覺
刷新生活的頁面
學(xué)習(xí)方法
可能是方法不對
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
賺錢方法
捕魚
同一Word文檔 縱橫頁面并存
主站蜘蛛池模板: 人妻丰满熟妇AV无码区| 国产一级二级在线观看| 亚洲日韩AV无码一区二区三区人| 亚洲女同欧美在线| 久久精品人人做人人综合试看| 亚洲精品在线影院| 99视频精品在线观看| a亚洲天堂| 91精品啪在线观看国产60岁| 国产精品久久久久久搜索| 亚洲第一成年人网站| 视频二区中文无码| 国产精品无码AⅤ在线观看播放| 婷婷色丁香综合激情| 国精品91人妻无码一区二区三区| 嫩草国产在线| 日本一本正道综合久久dvd| 欧美在线一二区| 操国产美女| 国产亚洲美日韩AV中文字幕无码成人 | 18黑白丝水手服自慰喷水网站| 91丝袜在线观看| 男女男免费视频网站国产| 国产va视频| 久久熟女AV| 永久毛片在线播| 免费国产无遮挡又黄又爽| 在线免费观看a视频| 一级高清毛片免费a级高清毛片| 99热亚洲精品6码| 欧美天天干| 一本大道香蕉久中文在线播放| 青青操视频免费观看| 日韩精品亚洲人旧成在线| 999国内精品视频免费| 久久免费视频6| 婷婷午夜影院| 国产精品成人免费综合| 国产亚洲成AⅤ人片在线观看| 国产视频你懂得| 婷婷伊人久久| AV不卡在线永久免费观看| 91一级片| 色综合网址| 亚洲福利一区二区三区| 综合成人国产| 91欧美在线| 国产午夜无码专区喷水| 色噜噜狠狠色综合网图区| 99久久国产综合精品2020| 一区二区自拍| 亚洲人成网站在线播放2019| Jizz国产色系免费| 亚洲a免费| 欧美日韩国产精品综合| 精品伊人久久大香线蕉网站| 99久久精品无码专区免费| 日本www在线视频| 欧美视频在线播放观看免费福利资源| 国产亚洲日韩av在线| 2020国产免费久久精品99| 91在线丝袜| 国产精品 欧美激情 在线播放 | 午夜国产小视频| 亚洲视频欧美不卡| 自拍欧美亚洲| 国产亚洲精品资源在线26u| 亚洲国产成人在线| 国产91高清视频| 日本久久免费| 色综合久久88| 大陆精大陆国产国语精品1024 | 欧美色综合网站| 国产视频自拍一区| 亚洲女同欧美在线| 国产大片黄在线观看| 国产精品对白刺激| 精品人妻AV区| 亚洲视频免| 67194亚洲无码| 亚洲一区二区三区麻豆| 国产视频你懂得|