在Web開(kāi)發(fā)中,會(huì)遇到從一頁(yè)(父頁(yè))導(dǎo)向另一頁(yè)(子頁(yè)),并且要求“返回”父頁(yè)的情況,在這里如果用ASP.NET提供的 Response.Redirect()方法,往往不會(huì)達(dá)到理想的效果,例如:返回后,重新加載了頁(yè)面,無(wú)法保存導(dǎo)向子頁(yè)前的狀態(tài),等等,在這里我就介紹 一下如何使用JavaScript中history.go()函數(shù)來(lái)實(shí)現(xiàn)返回功能并且保存住狀態(tài)的方法。
這個(gè)函數(shù)用起來(lái)很簡(jiǎn)單,只要在頁(yè)面上加一個(gè)html的input元素,例如:
<input type="button" value="返回">
然后再為這個(gè)元素添加onclick屬性,如:
<input type="button" value="返回" onclick="history.go(-1);">
這樣就能達(dá)到返回上一頁(yè)的效果。但是,往往在實(shí)踐中,并沒(méi)有這么簡(jiǎn)單,當(dāng)你在向服務(wù)器提交請(qǐng)求的時(shí)候,引起頁(yè)面回發(fā),你再用history.go(-1) 這招就不靈啦,它在這里是返回你回發(fā)前的狀態(tài),go后面的參數(shù),實(shí)際上就是標(biāo)識(shí)你要返回你回發(fā)第前n次的狀態(tài),所以只要能記住回發(fā)了幾次,就能用 history.go(-n)準(zhǔn)確地返回到父頁(yè)了。
在Web開(kāi)發(fā)中,全局變量也是存不住的,當(dāng)頁(yè)面回發(fā)后,全局變量的值就會(huì)丟失,取而代之的是視圖狀態(tài),所以我們就只能用視圖狀態(tài)來(lái)記錄回發(fā)的次數(shù)了。那么就封裝一個(gè)視圖狀態(tài)屬性把。
public int returnCount
{
get{
if(ViewState["returnCount"] == null)
ViewState["returnCount"] = 0;
return (int)ViewState["returnCount"];
}
set { ViewState["returnCount"] = value ;}
}
定義好這個(gè)后,把他放到Page_Load里面,讓他每次在頁(yè)面回發(fā)時(shí)減1,這樣就能準(zhǔn)確的記住回發(fā)了幾次。
protected void Page_Load(object sender, EventArgs e)
{
returnCount--; //要放在!iIsPostBack之外,要不然就僅僅在頁(yè)面第一次加載時(shí)執(zhí)行一次,回發(fā)時(shí)就不執(zhí)行了。
if(!IsPostBack)
{
}
}
吼吼,到這一步還沒(méi)完呢,要把我們封裝的屬性加到Js里面。如下:
<input type="button" value="返回" onclick="history.go('<% =returnCount %>');">
這下就完美了,管你在頁(yè)面上怎么回發(fā),只要一點(diǎn)這個(gè)按鈕,肯定會(huì)返回到父業(yè)的。
注意:
1、如果在本頁(yè)面上有Response.Redirect()到本頁(yè)或者類(lèi)似的情況,那么就要將returnCount作為查詢(xún)字符串傳遞一下了,因?yàn)檫@東西在頁(yè)面失效時(shí)就over了。
2、本文僅對(duì)非Ajax的Web系統(tǒng)有作用,Ajax的還沒(méi)仔細(xì)研究過(guò).
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。