前幾天跟皺鍵討論ASP.NET AJAX的時候,他說在ASP.NET AJAX 下也有pageLoad事件,因為對這個pageLoad沒有什麼編程經驗,所以也就不覺得有什麼。不過昨天晚上的一個功能讓我感覺到了這個pageLoad功能上的令人感歎之處。
眾所周知,ScriptManager是ASP.NET的的一個核心控制項,如果一個頁面用到了AJAX Extentions控制項的話,那麼該頁面上必須有ScriptManager控制項。當頁面上出現了異常時,它不會再像普通的2.0的頁面那樣顯示出紅黃頁(在沒有進行任何處理的情況下),而是以alert的方式彈出對話方塊,告知使用者出現了異常。這種彈出對話方塊的方式一般來說應該也是可以令人接受的,不過,若想得到更進階的使用者體驗的話,可能就需要我們自己手動再寫一些代碼了。比如說出現像網易郵箱中當你要清空垃圾郵件箱時的對話方塊效果,需要我們自己手動再寫一些代碼來實現。
在html頁面上放置一個隱藏的層,該層用來顯示我們的異常資訊。
1 <div id="errorMessage" style="LEFT: -30px; POSITION: relative; TOP: -257px; visibility:hidden">
2 2 <div class="title">
3 3 操作提示
4 4 </div>
5 5 <div class="alertTxt">
6 6 <span id="errorMessageLabel" runat="server"></span>
7 7 </div>
8 8 <div>
9 9 <input id="Button1" class="btn" type="button" value="OK" onclick="javascript :onOK();" />
1010 </div>
1111 </div>
1212 </center>
然後,我們就可以利用此層,以及ASP.NET AJAX架構下的JS的pageLoad事件中寫關於異常處理的事件了。
1
2<script language="javascript" type="text/javascript">
3 function pageLoad()
4 {
5 Sys.WebForms.PageRequestManager.getInstance().add_endRequest(onEndRequest);
6 }
7 function onEndRequest(sender, e)
8 {
9 // 異常發生時將對話方塊顯示給使用者
10 if(e.get_error())
11 {
12 // 顯示自訂對話方塊
13 $get("errorMessage").style.display = "block";
15 $get("errorMessageLabel").innerHTML ="出錯了,請重試!<br>" + e.get_error().description;
16 // 通知PageRequestManager異常已經處理過
17 e.set_errorHandled(true);
18 }
19 }
20 function onOK()
21 {
22 $get("errorMessage").style.display = "none";
23 }
24</script>
通過以上簡單的代碼,一個有著良好的使用者體驗的對話方塊就完成了。細細想想,這或許可以做為整個網站上所有頁面上的公有js檔案,將它嵌套到頁面中,則每個頁面的異常都會以一個良好體驗的對話方塊顯示給使用者。帥!