簡述:
用try捕獲異常後主動拋出一個異常,在Global.asax.vb的Application_Error中用Server.ClearError()清除異常,用System.Web.HttpContext.Current.Response輸出javascript代碼實現信息提醒和返回上一頁。
詳細說明:
例如,把連接數據庫的方法做成一個類cdbconn.vb。問題在於當數據庫連接失敗的時候,系統自動拋出的連接失敗的異常的處理。
由於程序調用該類的對象後的動作不可預計,因此最好在處理該異常後,後臺程序就此結束,返回之前的頁面。
在類中捕獲異常同樣可以try,但是處理完後使後臺程序就此結束就有點麻煩,在論壇中搜索到了思歸大大給的一個連接:
HOW TO: Create Custom Error Reporting Pages in ASP.NET by Using Visual C# .NET
http://support.microsoft.com/default.aspx?scid=kb;EN-US;306355
vb.net的聯接是
http://support.microsoft.com/default.aspx?scid=kb;EN-US;308132
實踐得出方案如下:
在類文件cdbconn.vb中有
Try
dbconn.Open()
Catch ex As Exception
'System.Web.HttpContext.Current.Response.Write(win.msgbox(strMsg_noneDatabase))
Throw New System.Exception(strMsg_noneDatabase)
End Try
截獲異常後再拋出一個異常。這話聽起來有點毛病,主要的用途在於可能會需要處理異常帶來的麻煩,這裏沒有什麼需要處理,所以只是自定義一個異常信息給系統用戶。
在Global.asax.vb中的Application_Error中添加相關動作
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
' 在發生錯誤時激發
Dim objErr As Exception = Server.GetLastError().GetBaseException()
Dim err As String = "Error Caught in Application_Error event" & _
System.Environment.NewLine & _
"Error in: " & Request.Url.ToString() & _
System.Environment.NewLine & _
"Error Message: " & objErr.Message.ToString() & _
System.Environment.NewLine & _
"Stack Trace:" & objErr.StackTrace.ToString()
'EventLog.WriteEntry("Sample_WebApp", err, EventLogEntryType.Error)
Server.ClearError()
System.Web.HttpContext.Current.Response.Write("<script language='javascript'>alert('" & objErr.Message.ToString & "');</script>")
System.Web.HttpContext.Current.Response.Write("<script language='javascript'>history.go(-1);</script>")
End Sub
這裏'EventLog.WriteEntry("Sample_WebApp", err, EventLogEntryType.Error)會使異常正常拋出,而不會繼續向下執行,所以註釋掉了,msdn上拷來的,難道是版本問題?
最重要的就是Server.ClearError(),沒有它異常會正常拋出的。截止到這一句系統會返回一張白紙,什麼都沒有這當然是不行的,所以下面用response輸出提示,並返回上一頁。至此問題解決。