問(wèn)題描述:
在實(shí)際運用中,我們在a.aspx頁(yè)面需要打開(kāi)一個(gè)新窗口(為描述方便,假定為b.aspx),在新窗口關(guān)閉之前,需要禁用a.aspx頁(yè)面。b.aspx里面觸發(fā)有相應的事件,當事件觸發(fā)的時(shí)候,同時(shí)應該更新b.aspx.
解決方法:
這時(shí)我們最好的選擇是用模式窗口打開(kāi)b.aspx,即showModalDialog(b.aspx).
如果直接用模式窗口打開(kāi)b.aspx頁(yè)面,如果b.aspx僅僅是textbox、dropdownlist之類(lèi)的運行在服務(wù)器端的文本控件(這些控件本身也不能觸發(fā)對應的事件),返回這些控件的值不會(huì )出什么問(wèn)題,但是如果要有服務(wù)器端button之類(lèi)調用cs里面的方法,或者本身會(huì )觸發(fā)事件,就會(huì )出問(wèn)題。當觸發(fā)這些方法,就會(huì )將模式窗口打開(kāi)的頁(yè)面做為一個(gè)頁(yè)面彈出(本例也就是b.aspx)。模式窗口里面是不能刷新的,所以這些事件如果要更新當前模式窗口里面的頁(yè)面內容,是不可能的。
這中機制是沒(méi)辦法改變的,觸發(fā)了相應的事件,就會(huì )重新加載一次頁(yè)面(觸發(fā)了Page_Load事件),即使IsPostBack是false.
這種情況下該怎么做才能達到預定的目的?
我們不妨試試這種方法:用框架進(jìn)行操作。說(shuō)簡(jiǎn)單點(diǎn):創(chuàng )建一個(gè)新頁(yè)面(c.aspx),只做框架支撐。對應子幀指向指定的頁(yè)面(b.aspx)。這樣我們在a.aspx頁(yè)面里用模式窗口打開(kāi)c.aspx,就達到預定的效果了。b.aspx頁(yè)面可以有任何觸發(fā)事件進(jìn)行更新頁(yè)面的內容。同時(shí)如果要傳值,就需要先傳值到框架頁(yè)面,然后再傳到既定的頁(yè)面。這種方法的由來(lái)是參考了同事的做法,本人覺(jué)得這種方法很簡(jiǎn)便,不需要有太多的考慮。操作起來(lái)相對來(lái)說(shuō)最容易。
第二種方法我們就需要有ajax方面的知識了。這種做法需要注意的是同樣不能夠觸發(fā)到本頁(yè)面的事件,否則就會(huì )自動(dòng)彈出模式窗口里面的頁(yè)面(沒(méi)有頁(yè)面支撐的情況下)。這種方式下我們需要借助第三個(gè)aspx頁(yè)面來(lái)進(jìn)行相應的事件操作處理,然后返回操作結果以更新(更新而不是刷新)模式窗口里面的內容。這種方式的難度要比第一種方法大,不好操作。尤其是模式窗口里面控件涉及到數據綁定的時(shí)候,更不好操作。
第三種方法本人沒(méi)操作成功。大致思想:用window.open()方法打開(kāi)b.aspx頁(yè)面,b.aspx頁(yè)面加載的時(shí)候,將a.aspx里面所有的控件都禁用掉,同時(shí)也要將a.aspx頁(yè)面的刷新功能關(guān)閉掉(shift+F10,F5,右鍵,瀏覽器本身的刷新按鈕),當b.aspx頁(yè)面關(guān)閉的時(shí)候,傳入一個(gè)參數到a.aspx頁(yè)面,直到該參數值為真的時(shí)候,再釋放所有禁用的資源。在實(shí)際操作中,open()方法打開(kāi)b.aspx頁(yè)面后禁止刷新a.aspx頁(yè)面遇到了問(wèn)題。在b.aspx頁(yè)面的window.onload=funciton(){}添加opener.document.oncontextmenu="return false",達不到禁用右鍵
opener.document.onkeydown=function(){if(event.keyCode==116) event.keyCode=0;event.returnValue=false;}調用對應的事件也禁止不了F5鍵。
當初也懷疑是這些事件寫(xiě)的有問(wèn)題,就直接把這些事件放在一個(gè)單獨的一個(gè)頁(yè)面做測試,一旦到測試頁(yè)面的時(shí)候,這些都是正確的:禁掉了F5和右鍵?;氐接胦pen()打開(kāi)b.aspx頁(yè)面,達不到禁用目的。后面的根本就進(jìn)行不下去了,很喪氣............
第一種第二種方法都不錯,第二種方法要對ajax有一定的了解。至于選擇哪種技術(shù),則需要看個(gè)人的情況,哪種方法上手快就選那種方法。
第三種方法出現的問(wèn)題,不知該如何解決....
發(fā)表于 @ 2007年08月02日 08:58:00|評論(2)|編輯