看到有朋友說前面一章講得沒必要,想想也確實.本來是沒有打算講這些基礎的,只是行文起來沒有約束,就蕩開到基礎知識上面了.從這節開始,將會給大家介紹幾個ASP中的三大通用類,它貫穿於我所設計的三層架構中,是對ASP語法的擴展,可以提高很多細節處理上的效率,可以算是一點點框架的味道.
本節介紹錯誤處理類別,類別名稱Con_Error,在程式碼頁面之初就進行初始化,實例名為e,以下的e.add 即使用該錯誤類別的實例化物件進行操作.
方法介紹:
e.Add(ByVal vErrorMessage ) 記錄一個錯誤,並且設定e.Error = true . 在程式偵測使用者名稱合法性等地方發現錯誤時,就呼叫這個方法,記錄一個錯誤訊息.
例如,用戶登陸時密碼錯誤,則調用e.add(您的帳號或密碼錯誤) .這時候,錯誤對象e中便記錄了一個錯誤,錯誤對象的屬性e.Error=true .在後續操作中,可以使用錯誤物件的這個屬性來判斷.
例如:
出現錯誤後彈出小視窗提示錯誤,並返回前一頁.
if e.Error then
e.Alert_Back 請重新登入! 'Alert_Back 的作用在後面介紹.
end if
e.Alert_Back(ByVal vMessage) 使用Javascript彈出一個錯誤提示框,顯示目前所有的錯誤清單,Alert_Back(vMessage)中的vMessage顯示在最後一行,用於提示用戶在看到這個錯誤訊息後需要採取的步驟.並且回到前一頁. 這個方法的程式碼貼出來,大家會更好理解:
Public Sub Alert_Back(ByVal vMessage)
strJSMessage = JSMessage & vMessage 'JSMessage用於儲存e物件中的錯誤清單,每個錯誤之間用/n分開.
%>
<script language=javascript >
<!--//
alert(<%=strJSMessage %>); '彈出提示錯誤框.
history.back(); '返回前一頁
//-->
</script>
<%
response.end '注意這裡要停止輸出,避免出錯的同時程式還繼續執行.
End Sub
e.Alert_Back 方法延伸了幾個類似效果的方法,如下一同介紹,實現的過程請看附加的源碼:
e.Alert(ByVal vMessage) 只彈出錯誤提示框,不回傳前一頁,也不停止程式的執行.
e.Alert_Close(ByVal vMessage) 彈出錯誤提示框,當使用者點選確定後,關閉目前窗口
e.OK_Go(ByVal vMessage,ByVal vURL) 彈出訊息提示框,當使用者點選確定後,跳到vURL頁面
e.Go(ByVal vURL) 直接跳到vURL頁面
以上幾個方法的作用,大家應該都很熟悉了,其實它們不僅限於錯誤處理的.
e.Clear 清空錯誤物件中記錄的錯誤訊息, e.Error = false
因為e物件是一個全域的物件,可能在很多過程中都被呼叫了. 當你只需要統計某一個模組中的錯誤時,可以在開始呼叫這個方法,清空e中的錯誤.
以下幾個是對Response.Write的包裝,目的只是為了使用時的方便快速.
e.Debug(ByVal vMessage) 輸出調試信息. 當程式完工時,其中會存在不少用Response.write 輸出的錯誤調試信息,要都刪掉又要細細地找. 使用e.Debug專門輸出調試信息,當程式完成時,只需要搜尋e.Debug,就可以找到所有的偵錯錯誤訊息的位置.
ew(ByVal vMessage) 輸出訊息. 只是Response.write的簡單包裝,在程式中輸入ew 比輸入Response.write 不知道要方便多少,而且總是容易寫錯.
e.BR 輸出一個換行符,等同於response.Write <BR />
以下4個是對Response.End的包裝,只是按照操作習慣,定義的幾個一樣功能的方法:
e.Pause == Response.End
eP == Response.End
e.Stop == Response.End
e.End == Response.End
還有一個屬性e.Message ,輸出e物件中所有的錯誤列表
具體的實作細節請看程式碼
複製代碼代碼如下:
Class Con_Error
Private blnError
private strMessage
private strJSMessage
Private Sub Class_initialize()
blnError = false
strMessage =
End Sub
Private Sub Class_Terminate()
End Sub
' =================================================== ===================================
' Property
' =================================================== ===================================
' Message :
Public Property Let Message(ByVal value)
strMessage = value
End Property
Public Property Get Message()
Message = strMessage
End Property
' Error number
Public Property Get Error()
Error = blnError
End Property
' JSMessage : show in messagebox
Private Property Get JSMessage()
strJSMessage = Replace(strMessage , <br> , /n)
strJSMessage = Replace(strJSMessage , vbCrLf , )
JSMessage = strJSMessage
End Property
' =================================================== ===================================
' Method
' =================================================== ===================================
' Add : add an Error message
Public Sub Add(ByVal vMessage)
blnError = true
strMessage = strMessage & vMessage & <br>
End Sub
Public Sub Clear
blnError = false
strMessage =
End Sub
' Alert
Public Sub Alert(ByVal vMessage)
strJSMessage = JSMessage & vMessage
%>
<script language=javascript >
<!--//
alert(<%=strJSMessage %>);
//-->
</script>
<%
End Sub
' Alert_Back : alert and back
Public Sub Alert_Back(ByVal vMessage)
strJSMessage = JSMessage & vMessage
%>
<script language=javascript >
<!--//
alert(<%=strJSMessage %>);
history.back();
//-->
</script>
<%
response.end
End Sub
' Alert_Close : alert and close
Public Sub Alert_Close(ByVal vMessage)
strJSMessage = JSMessage & vMessage
%>
<script language=javascript >
<!--//
alert(<%=strJSMessage %>);
window.opener = null;
window.close();
//-->
</script>
<%
response.end
End Sub
'*********************************************
'Debug : response.write ,use it to delete debug message easily,just seach e.Debug from files
'*********************************************
Public Sub OK_Go(ByVal vMessage,ByVal vURL)
strJSMessage = JSMessage & vMessage
%>
<script language=javascript >
<!--//
alert(<%=strJSMessage %>);
location.href = '<%=vURL %>';
//-->
</script>
<%
response.end
End Sub
Public Sub Go(ByVal vURL)
response.Redirect vURL
response.end
End Sub
'*********************************************
'Debug : response.write ,use it to delete debug message easily,just seach e.Debug from files
'*********************************************
Public Sub Debug (ByVal vMessage)
response.Write vMessage
response.flush
End Sub
' ****** W : write
Public Sub W(ByVal vMessage)
response.Write vMessage
End Sub
' ****** BR : write <br>
Public Sub Br
response.Write <BR />
End Sub
'*********************************************
'Pause : response.end , mark debug info clearly
'*********************************************
Public Sub Pause
response.end
End Sub
Public Sub P
response.end
End Sub
Public Sub [Stop]
response.end
End Sub
Public Sub [end]
response.end
End Sub
End Class