• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

      2010-06-06 07:18:42劉洪坡李金鎖
      關(guān)鍵詞:服務(wù)器端控件瀏覽器

      劉洪坡,李金鎖,石 磊

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

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

      1 超級(jí)鏈接

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

      1.1 標(biāo)簽

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

      1.2 Hyperlink控件

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

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

      2 跨頁(yè)面提交

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

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

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

      3.1 客戶端導(dǎo)航

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

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

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

      3.2.1 Server.Transfer

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

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

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

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

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

      3.2.2 Server.Execute

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      猜你喜歡
      服務(wù)器端控件瀏覽器
      反瀏覽器指紋追蹤
      電子制作(2019年10期)2019-06-17 11:45:14
      關(guān)于.net控件數(shù)組的探討
      軟件(2018年7期)2018-08-13 09:44:42
      淺析異步通信層的架構(gòu)在ASP.NET 程序中的應(yīng)用
      成功(2018年10期)2018-03-26 02:56:14
      環(huán)球?yàn)g覽器
      再見,那些年我們嘲笑過的IE瀏覽器
      在Windows中安裝OpenVPN
      網(wǎng)頁(yè)防篡改中分布式文件同步復(fù)制系統(tǒng)
      就這樣玩會(huì)VBA中常見的自定義控件
      電腦迷(2012年24期)2012-04-29 00:44:03
      瀏覽器
      基于Struts的Web應(yīng)用系統(tǒng)數(shù)據(jù)驗(yàn)證
      贵定县| 盐津县| 分宜县| 蛟河市| 三亚市| 石楼县| 商洛市| 东光县| 临夏市| 武乡县| 抚松县| 达州市| 靖远县| 九龙坡区| 丹凤县| 鹤峰县| 怀化市| 阳原县| 石柱| 隆回县| 肇源县| 桃园市| 吉安县| 西昌市| 吉水县| 兰西县| 鹤壁市| 四川省| 清丰县| 武功县| 西畴县| 通州市| 绥化市| 独山县| 华蓥市| 师宗县| 铜川市| 儋州市| 海阳市| 卢龙县| 乐亭县|