轉(zhuǎn)帖|其它|編輯:郝浩|2011-08-09 15:31:02.000|閱讀 1857 次
概述: 在Web開(kāi)發(fā)技術(shù)中有很多的頁(yè)面跳轉(zhuǎn)的i技術(shù),我們可以利用ASP.NET的內(nèi)置對(duì)象提供的方法實(shí)現(xiàn)跳轉(zhuǎn),也可以根據(jù)ASP.NET提供的服務(wù)器控件與 HTML控件實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn),我們還可以利用javascript腳本語(yǔ)言編寫(xiě)函數(shù)實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)。現(xiàn)在我們就具體的看一下7種頁(yè)面跳轉(zhuǎn)的方法。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷(xiāo)售中 >>
在Web開(kāi)發(fā)技術(shù)中有很多的頁(yè)面跳轉(zhuǎn)的i技術(shù),我們可以利用ASP.NET的內(nèi)置對(duì)象提供的方法實(shí)現(xiàn)跳轉(zhuǎn),也可以根據(jù)ASP.NET提供的服務(wù)器控件與 HTML控件實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn),我們還可以利用javascript腳本語(yǔ)言編寫(xiě)函數(shù)實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)。現(xiàn)在我們就具體的看一下7種頁(yè)面跳轉(zhuǎn)的發(fā)方法。
一、前言
在Web開(kāi)發(fā)技術(shù)中有很多的頁(yè)面跳轉(zhuǎn)的i技術(shù),我們可以利用ASP.NET的內(nèi)置對(duì)象提供的方法實(shí)現(xiàn)跳轉(zhuǎn),也可以根據(jù)ASP.NET提供的服務(wù)器控件與 HTML控件實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn),我們還可以利用javascript腳本語(yǔ)言編寫(xiě)函數(shù)實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)。現(xiàn)在我們就具體的看一下7種頁(yè)面跳轉(zhuǎn)的發(fā)方法。
二、頁(yè)面跳轉(zhuǎn)技術(shù)
1、利用HTML標(biāo)簽
1: <a href=”test.aspx”>測(cè)試頁(yè)</a>
這個(gè)例子十分的簡(jiǎn)單,只要通過(guò)<a>標(biāo)簽的href屬性制定要跳轉(zhuǎn)的頁(yè)面的url就可以實(shí)現(xiàn)跳轉(zhuǎn)。
2、HyperLink控件
這是最常見(jiàn)的一種轉(zhuǎn)向方法;
1)Asp.net 服務(wù)器端控件 屬性NavigateUrl指定要跳轉(zhuǎn)到的Url地址
2)NavigateUrl是可以在服務(wù)器端使用代碼修改,這個(gè)區(qū)別于<a>
3)由于HyperLink本身沒(méi)有事件所以要在服務(wù)器端其它事件中設(shè)置NavigateUrl
4)實(shí)例代碼
<Asp:HyperLink id=”hyperlink” runat=”server” NavigateUrl=”test.aspx”>ok</Asp:HyperLink>
3、Response.Redirect()方法
1)過(guò)程:發(fā)送一個(gè)Http響應(yīng)到客戶端,通知客戶端跳轉(zhuǎn)到一個(gè)新的頁(yè)面,然后客戶端再發(fā)送跳轉(zhuǎn)請(qǐng)求到服務(wù)器端。
2)頁(yè)面跳轉(zhuǎn)之后內(nèi)部控件保存的所有信息丟失,當(dāng)A跳轉(zhuǎn)到B,B頁(yè)面將不能訪問(wèn)A頁(yè)面提交的數(shù)據(jù)信息。
3)使用這個(gè)方法使用這個(gè)方法跳轉(zhuǎn)后瀏覽器地址欄的Url信息改變
4)可以使用Session Cookies Application等對(duì)象進(jìn)行頁(yè)面間的數(shù)據(jù)傳遞
5)重定向操作發(fā)生在客戶端,總共涉及到兩次與Web服務(wù)器的通信:一次是對(duì)原始頁(yè)面的請(qǐng)求,另一次是重定向新頁(yè)面的請(qǐng)求
這個(gè)跳轉(zhuǎn)頁(yè)面的方法跳轉(zhuǎn)的速度不快,因?yàn)樗?個(gè)來(lái)回(2次postback),但他可以跳 轉(zhuǎn)到任何頁(yè)面,沒(méi)有站點(diǎn)頁(yè)面限制(即可以由雅虎跳到新浪),同時(shí)不能跳過(guò)登錄保護(hù)
6)實(shí)例代碼
<asp:Button ID="Button1" runat="server" Text="跳轉(zhuǎn)" onclick="Button1_Click1" />
我們現(xiàn)在設(shè)計(jì)頁(yè)面中添加一個(gè)Button控件,然后我們?cè)谙鄳?yīng)的cs文件中紅編寫(xiě)一下代碼。
protected void Button1_Click1(object sender, EventArgs e)
{
Response.Redirect("//www.baidu.com");
}
4、Server.Transfer()方法
1)實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)的同時(shí)將頁(yè)面的控制權(quán)進(jìn)行移交
2)頁(yè)面跳轉(zhuǎn)過(guò)程中Request Session等保存的信息不變,跳轉(zhuǎn)之后可以使用上一個(gè)頁(yè)面提交的數(shù)據(jù)
3)跳轉(zhuǎn)之后瀏覽器地址欄的Url不變
4)這種方法的重定向請(qǐng)求是在服務(wù)器端的進(jìn)行的,瀏覽器不知道頁(yè)面已經(jīng)發(fā)生了一次跳轉(zhuǎn)
速度快,只需要一次postback ,但是它必須是在同一個(gè)站點(diǎn)下,因?yàn)樗莝erver的一個(gè)方法。另外,他能跳過(guò)登錄保護(hù)。
5)實(shí)例代碼
protected void Button1_Click(object sender, EventArgs e)
{
Server.Transfer("Server2.aspx");
}
注意:這里的路徑只能是虛擬路徑,也就是說(shuō)可以制定為同一目錄下的頁(yè)面,但是不能制定絕對(duì)的地址比如說(shuō)www.baidu.com.
5、 Server.Execute()方法
1)該方法允許當(dāng)前頁(yè)面執(zhí)行同一個(gè)Web服務(wù)器上的另一個(gè)頁(yè)面
2)頁(yè)面執(zhí)行完畢之后重新回到原始頁(yè)面發(fā)出Server.Execute()的位置。
3)這種方式類(lèi)似針對(duì)頁(yè)面的一次函數(shù)調(diào)用,被請(qǐng)求的頁(yè)面可以使用原始頁(yè)面的表單數(shù)據(jù)和查詢字符串集合
4)被調(diào)用頁(yè)面的Page指令的EnableViewStateMac屬性設(shè)置為False
5)實(shí)例代碼
protected void Button1_Click(object sender, EventArgs e)
{
Server.Execute("Server2.aspx");
}
注意:這里也只能使用虛擬路徑。
6、Javascript實(shí)現(xiàn)跳轉(zhuǎn)
我們可以頁(yè)面中利用javascript編寫(xiě)函數(shù),來(lái)實(shí)現(xiàn)跳轉(zhuǎn)。
<script language="javascript" type="text/javascript">
// 以下方式直接跳轉(zhuǎn)
window.location.href = 'hello.html';
// 以下方式定時(shí)跳轉(zhuǎn)
setTimeout("javascript:location.href='hello.html'", 5000);
</script>
7、Respone.Write()
可以通過(guò)在Write方法中傳入腳本語(yǔ)言javascript來(lái)實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)。
Respose.Write( " <script language= 'javascript '> window.open( ' "+ url + " ');
</script> ");
三、頁(yè)面跳轉(zhuǎn)總結(jié)
1)當(dāng)需要把用戶跳轉(zhuǎn)到另一臺(tái)服務(wù)器上的頁(yè)面的時(shí)候使用redirect
2)當(dāng)需要把用戶跳轉(zhuǎn)到非aspx頁(yè)面時(shí)候,如html使用redirect
3)需要把查詢字符串作為url一部分的時(shí)候保留傳給服務(wù)器的時(shí)候,因?yàn)槠渌?種方法不能做到2次postback,把數(shù)據(jù)先帶回服務(wù)器使用redirect
4)需要aspx頁(yè)面間的轉(zhuǎn)換(不涉及登錄) 使用transfer
5)當(dāng)需要把a(bǔ)spx頁(yè)面的輸出結(jié)果插入到另一個(gè)aspx頁(yè)面的時(shí)候使用execute方法。
6)如果要讓用戶來(lái)決定何時(shí)轉(zhuǎn)換頁(yè)面以及轉(zhuǎn)到哪一個(gè)頁(yè)面,超級(jí)鏈接最適合。
7)如果要用程序來(lái)控制轉(zhuǎn)換的目標(biāo),但轉(zhuǎn)換的時(shí)機(jī)由用戶決定,使用Web服務(wù)器的HyperLink控件,動(dòng)態(tài)設(shè)置其N(xiāo)avigateUrl屬性。
8)如果要把用戶連接到另一臺(tái)服務(wù)器上的資源,使用Response.Redirect。
9)如果要將查詢字符串作為URL的一部分保留,使用Response.Redirect。
10)如果要將執(zhí)行流程轉(zhuǎn)入同一Web服務(wù)器的另一個(gè)ASPX頁(yè)面,應(yīng)當(dāng)使用Server.Transfer而不是Response.Redirect,因?yàn)镾erver.Transfer能夠避免不必要的網(wǎng)絡(luò)通信,從而獲得更好的性能和瀏覽效果。
11)如果要捕獲一個(gè)ASPX頁(yè)面的輸出結(jié)果,然后將結(jié)果插入另一個(gè)ASPX頁(yè)面的特定位置,則使用Server.Execute。
12)如果要確保HTML輸出合法,請(qǐng)使用Response.Redirect,不要使用Server.Transfer或Server.Execute方法。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:博客園