問題: 在webform上有一個控件,這個控件最好是能夠實時的去訪問數據庫,一旦數據庫裡面有改動,便對客戶端提交數據,顯示最新的數據。
分析:
因為是要客戶端更新,所以必須要用到JS的前台時鐘功能,服務端變了,客戶端要刷新才能更新數據,如何能做到不刷新更新數據,或者假刷新頁面,即客戶端基本看不出的刷新。
解決辦法:(有錯的地方還請大家更正,本人水平有限,謝謝了)
主要有兩種解決方法:實時性的和輪詢性的
實時:通過在數據庫中增加觸發器去觸發,然後在服務器中寫了一個文件,用做信號量。這種技術我覺得對這個問題來言過於復雜,所以就沒繼續研究,有興趣的朋友可以去MSDN上看,但確實能夠做到實時的更新數據,對即時的對話最有效。
輪詢:1、采用XMLhttp無刷新方式。這類方式可以看下我前面轉的別人寫的文章,裡面有詳細介紹,但是我測試了後,發覺從服務器上獲取的是整個頁面的Html代碼,要從中得到你需要的控件內容,並且重置還是過於復雜,且效率不一定高。
2、用Html的框架去完成,也就是我主要寫的方法,這個方法簡單易於實現,對只是動態顯示很小數據的情況我覺得非常好用。
詳細介紹:在Html中需要更新的地方寫上<iframe src="../test/WebForm2.ASPx"></iframe> 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)等前台時鐘),這樣結果就完成了,在第一個頁面啟動後第二個頁面沒隔一段時間刷新,但是客戶端的感覺和沒刷新一樣的。