asp.net關於模式窗口刷新問題
06-04
asp.net關於模式窗口刷新問題新一篇:asp.net中採用ajax進行多文件上傳和刪除問題描述: 在實際運用中,我們在a.aspx頁面需要打開一個新窗口(為描述方便,假定為b.aspx),在新窗口關閉之前,需要禁用a.aspx頁面。b.aspx裡面觸發有相應的事件,當事件觸發的時候,同時應該更新b.aspx.解決方法: 這時我們最好的選擇是用模式窗口打開b.aspx,即showModalDialog(b.aspx). 如果直接用模式窗口打開b.aspx頁面,如果b.aspx僅僅是textbox、dropdownlist之類的運行在伺服器端的文本控制項(這些控制項本身也不能觸發對應的事件),返回這些控制項的值不會出什麼問題,但是如果要有伺服器端button之類調用cs裡面的方法,或者本身會觸發事件,就會出問題。當觸發這些方法,就會將模式窗口打開的頁面做為一個頁面彈出(本例也就是b.aspx)。模式窗口裡面是不能刷新的,所以這些事件如果要更新當前模式窗口裡面的頁面內容,是不可能的。 這中機制是沒辦法改變的,觸發了相應的事件,就會重新載入一次頁面(觸發了Page_Load事件),即使IsPostBack是false. 這種情況下該怎麼做才能達到預定的目的? 我們不妨試試這種方法:用框架進行操作。說簡單點:創建一個新頁面(c.aspx),只做框架支撐。對應子幀指向指定的頁面(b.aspx)。這樣我們在a.aspx頁面里用模式窗口打開c.aspx,就達到預定的效果了。b.aspx頁面可以有任何觸發事件進行更新頁面的內容。同時如果要傳值,就需要先傳值到框架頁面,然後再傳到既定的頁面。這種方法的由來是參考了同事的做法,本人覺得這種方法很簡便,不需要有太多的考慮。操作起來相對來說最容易。 第二種方法我們就需要有ajax方面的知識了。這種做法需要注意的是同樣不能夠觸發到本頁面的事件,否則就會自動彈出模式窗口裡面的頁面(沒有頁面支撐的情況下)。這種方式下我們需要藉助第三個aspx頁面來進行相應的事件操作處理,然後返回操作結果以更新(更新而不是刷新)模式窗口裡面的內容。這種方式的難度要比第一種方法大,不好操作。尤其是模式窗口裡面控制項涉及到數據綁定的時候,更不好操作。 第三種方法本人沒操作成功。大致思想:用window.open()方法打開b.aspx頁面,b.aspx頁面載入的時候,將a.aspx裡面所有的控制項都禁用掉,同時也要將a.aspx頁面的刷新功能關閉掉(shift+F10,F5,右鍵,瀏覽器本身的刷新按鈕),當b.aspx頁面關閉的時候,傳入一個參數到a.aspx頁面,直到該參數值為真的時候,再釋放所有禁用的資源。在實際操作中,open()方法打開b.aspx頁面後禁止刷新a.aspx頁面遇到了問題。在b.aspx頁面的window.onload=funciton(){}添加opener.document.oncontextmenu="return false",達不到禁用右鍵opener.document.onkeydown=function(){if(event.keyCode==116) event.keyCode=0;event.returnValue=false;}調用對應的事件也禁止不了F5鍵。 當初也懷疑是這些事件寫的有問題,就直接把這些事件放在一個單獨的一個頁面做測試,一旦到測試頁面的時候,這些都是正確的:禁掉了F5和右鍵。回到用open()打開b.aspx頁面,達不到禁用目的。後面的根本就進行不下去了,很喪氣............ 第一種第二種方法都不錯,第二種方法要對ajax有一定的了解。至於選擇哪種技術,則需要看個人的情況,哪種方法上手快就選那種方法。 第三種方法出現的問題,不知該如何解決....
推薦閱讀:
發表於 @ 2007年08月02日 08:58:00|評論(2)|編輯
舊一篇:未將對象引用設置到對象的實例--問題記錄推薦閱讀:
※關於「兩神成象」喜用神例解
※關於愛情的經典語錄
※關於人生的好詞好句
※所有人,關於社保卡,你想知道的都在這!
※關於勤學的勵志名言