2008年12月16日

如何在 .NET 後端處理時加上等待訊息

坎尼的同事問到這個問題
由於舊系統的資料量太大 每次 Query 都會等待一段時間
可是 user 有時卻等不及想再按一下
這時除了讓所有 button diable 的方法 (請參考 這裡
還可以利用簡單的提示訊息 讓使用者明白目前的系統正在運作

由於舊系統是以 vs 2003 做開發 要加入 Ajax 套件的功能有點麻煩
所以坎尼想到了用 javascript 來控制訊息

這邊要提一下 Webform 執行指令的先後順序
當按下一個 asp button 要送回後端處理時
此時瀏覽器會優先執行 button 上的 javascript
(其他控制項的先後順序當然也是這樣)
所以可以利用 控制項Attributes.Add() 方法 加入前端觸發的事件
以下就按下 button 然後產生文字提示作示範

首先在畫面上佈置一個 label 及 button 控制項
坎尼把 label 的文字顏色改為 紅色 這樣比較醒目

接著在 page_load 事件加上前端的 onclick 事件
(若是使用 vs 2005 以上版本 button 可以改用 OnClientClick 屬性)
這邊可以看到 坎尼在按下 button 時 利用 javascript 將 label 的文字改變
另外第一句註解的地方 是 jquery 的寫法


再來看按下 button 的事件
這邊可以放置後端處理事件的 code (範例是利用 Thread 讓整個程序睡5秒
記得在事件結束前 把 label 的文字改為 「載入完成


以下是實際執行情況


由於客戶只要求能有個提示就好 所以坎尼也只幫同事研究到這邊
其實這類的應用應該古早以前就有人寫過了吧? (坎尼還沒 Google 過

除了文字改變的表示外
還可利用 javascript 去控制 css 樣式
讓文字標籤出現完成字樣後 再慢慢的淡出
(將顏色改為和背景色相同 或是改 alpha 值 有興趣的人請自行測試
更懶的人可以直接用 display 的屬性讓 Label 消失

(以下碎碎念
近年出現了許多很炫麗的網頁技術
但在寫程式之前 其實可以先思考開發的便利性及功能性
此類簡單的應用勝過研究許許多多的新技術 只為了導入一個簡單的功能
花費的時間人力成本可能勝過原本的想像

坎尼也是很喜歡去學新技術
不過還是不要只 Google 了一下 囫圇吞棗完就準備上陣
許多基礎原理還是要弄懂 免得後來 debug 到天明 :p

1 則留言:

Unknown 提到...

This is a good reference:
PleaseWaitButton ASP.NET Server Control
http://www.codeproject.com/KB/webforms/PleaseWaitButton.aspx

Google Spreadsheet 裡用規則運算式

最近因為工作關係,遇到要用 Google Form 及 Google Sheet 所以研究了 Google Sheet 裡的一些 function 怎麼用 首先,分享一下如何在 Google Sheet 裡用規則運算 :D