問題:
在webform上有一個控件,這個控件最好是能夠即時的去存取資料庫,一旦資料庫裡面有改動,便對客戶端提交數據,顯示最新的數據。
分析:
因為是要客戶端更新,所以必須要用到js的前台時鐘功能,服務端變了,客戶端要刷新才能更新數據,如何能做到不刷新更新數據,或者假刷新頁面,即客戶端基本看不出的刷新。
解決方法:(有錯的地方還請大家更正,本人程度有限,謝謝了)
主要有兩種解決方法:即時性的和輪詢性的
即時:透過在資料庫中增加觸發器去觸發,然後在伺服器中寫了一個文件,用做信號量。這種技術我覺得對這個問題來言過於複雜,所以就沒繼續研究,有興趣的朋友可以去MSDN上看,但確實能夠做到實時的更新數據,對即時的對話最有效。
輪詢:1、採用xmlhttp無刷新方式。這類方式可以看下我前面轉的別人寫的文章,裡面有詳細介紹,但是我測試了後,發覺從伺服器上獲取的是整個頁面的html程式碼,要從中得到你需要的控制內容,並且重置還是過於複雜,效率不一定高。
2.用html的框架去完成,也就是我主要寫的方法,這個方法簡單容易實現,對只是動態顯示很小數據的情況我覺得非常好用。
詳細介紹:在html中需要更新的地方寫上iframe src="../test/WebForm2.aspx" src就是要連接的頁面,然後把框架的大小和捲軸什麼的按照需要調整下。
新建一個頁面WebForm2.aspx,作為被框架的連線頁面,把需要即時更新的控制項也放在這個頁裡面,然後在其中的Page_Load事件裡面
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'在此放置取得資料庫更新的程式碼,和控制項關聯 End Sub
再在html加入meta HTTP-EQUIV="Refresh" content="1" URL="/test/WebForm2.aspx"
表示間隔1秒自動刷新本頁面(你也可以根據實際情況,添加如window.setInterval(function,1000)等前台時鐘),這樣結果就完成了,在第一個頁面啟動後第二個頁面沒隔一段時間刷新,但是客戶端的感覺和沒刷新一樣的。