电竞比分网-中国电竞赛事及体育赛事平台

分享

asp.net框架內進行頁面跳轉的問題

 行走在理想邊緣 2019-08-21

在Asp.NET使用框架頁面的時候,常常在框架內部頁面中進行跳轉,但是我們常常也會遇到這樣的一種情況:即我們需要跳轉的不只是部分框架的頁面,而是將整個主頁面進行跳轉,比如在框架左側頁面中操作的時候,需要跳轉到登陸頁面等等。

這種情況下的跳轉其實跟HTML中進行主框架的跳轉是一樣的,在早期使用HTML的時候,我們使用Javascript,在Asp.net中,后臺代碼可以為:

Response.Write("<script>parent.location='login.apsx';</script>");
Response.Write("<script>top.location='login.apsx';</script>");
Response.Write("<script>parent.document.location.href='login.apsx';</script>");

如果點擊的按鈕是在框架中嵌套的框架中,那如果只是用上面的語句,只能將第一層框架進行完全跳轉,而外層的還保持不變,這時就需要這樣了。

Response.Write("<script>parent.parent.location='../main.aspx';</script>");

Response.Write("<script>top.location='login.apsx';</script>");

后記

top屬性
每一個WINDOW對象,不論他是常規(guī)HTML頁面??蚣芗撁妗W涌蚣苓€是孫子框架,都具有一個TOP屬性。這個屬性返回對載入瀏覽器得最頂層WINDOE對象得引用;

。如果WINDOW對象是常規(guī)HTML頁面,TOP就是SELF
。。。。。。。。。。。頂層框架及頁面, 。。。。。。。。
。。。。。。。。。。。子框架,TOP指向框架得父親,也就是說,下面兩個表達式是等效的;
SELF.TOP
SELF.PARENT
。如果WINDOW對象是自框架,TOP指向框架得祖父。也就是說下面兩個表達式是等效得
self.top
self.parent.parent
這可能提醒了你一個減少按鍵得好方法,尤其是當你認為能為能僅適用TOP本身是(那就是說,使用TOP本身來代替SELF.TOP或者WINDOW.TOP),這雖是可行的,但是應該特別注意:必須確保TOP真正指向你的頂層框架

那當我們不僅需要轉移框架頁面,還需要傳遞參數,那么傳參跳轉的語句顯然既可以使用QueryString在跳轉的URL后面加“?XX='XXXXX'”即可,也可以使用Session來實現。

問題解決了,我們來引申一下:

如果我們要跳轉的不是主框架頁面了,而是右邊甚至于是框架中的任意一個頁面,那么該如何呢?

答案其實也很簡單,我們再來仔細研究下我們上面列出來的三條跳轉語句,都是使用的獲取Documnet中的父層的框架對象,然后進行跳轉,那我們其實只要使用我們熟悉的Javascript獲取到相應的要跳轉的框架對象進行跳轉,至于傳參嘛,那就跟上面是完全一樣了哦!
我們來看下示例:

Response.Write"<script language='javascript'>window.location='left.aspx';parent.rightframeName.location='right.aspx'</script>");

實現跳轉了嗎?是的,恭喜了,但是這樣OK了嗎?還沒有...
我們發(fā)現,這樣進行跳轉的時候,左邊的框架確實是跳轉了,但是右邊的框架也隨即跟著刷新了,右邊頁面中所作的一些改動也都被重置掉了,這可不是我們想要的結果,那么怎么辦?再往下看:
我們都知道,在HTML時代是不存在這個問題的,為什么呢?嘿嘿,因為那是HTML控件,使用的JavaScript客戶端代碼,因此它不會回發(fā)服務器,那么我們是不是可以也使用HTML控件,然后再在它的onclick時間中實現呢? 當然是可以的,你不要跟我說你用的是服務端控件,你要在后臺代碼里實現哦,在LOAD時間里AddAttributes方法添加一個onclick事件就OK了的。
我在網上賺了一圈,還發(fā)現一個牛人提出來的方法,看完之后不得不提一下HTML中的target ,具體內容?白度上自己擺一把去~
我這里就把牛人的方案照搬過來了阿:

假設左框架為 frmLeft,右框架為 frmRight

<frame name="frmLeft" src="left.aspx">
<frame name="frmRight" src="right.aspx">

關于左右框架間的數值傳遞有幾種方法:

第一種:不提交服務器,在客戶端實現

left.aspx 中的代碼

<INPUT οnclick="HandToRight()" id="Button1" value="Button" name="Button1">
<script language=javascript>
<!--
function HandToRight()
{
var para = document.getElementByIdx_xx_x_x_x("TextBox1").value;
window.parent.frmRight.location.replace("right.aspx?p="+para);
}
//-->
</script>

此方法通過 URL 傳參數,不安全


第二種,用 POST 的方法,left.aspx 的代碼,注意 form 的 target

<form id="Form1" method="post" runat="server" target ="frmRight">

編寫提交按鈕事件
Session["ID"]=TextBox1.Text;
Response.Redirect ("right.aspx");

此方法較安全,但多一個往返 

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多