2012-01-04 55 views
3

我希望做如下......提供的網頁開發者可以重定向到提供發生錯誤...就像一個VB錯誤連接無法打開或對象找不到...或數據庫錯誤提出...但由於我將重定向到一個子頁面實際上並沒有重定向...是否有可能我不能從一個子重定向?看起來很奇怪。傳統的ASP - Response.Redirect的一個子 - 錯誤處理

運行的是引發錯誤

Dim cmd 
Set cmd = Server.CreateObject("ADODB.Command") 
cmd.ActiveConnection = con 
cmd.CommandType = adCmdStoredProc 
cmd.CommandText = "spReturnDBException" 
cmd.Execute 

,呼叫處理錯誤的功能,設置了一些會話PARMS並重定向如果neccessary

HandleErrors con _ 
      , Request.ServerVariables("PATH_INFO") _ 
      , "An error occurred while trying to save sessions." _ 
      , "Actual Error: " + Err.Description + " EmpNo: " + Session("EmpNo") _ 
      + ". QueryString: " + Request.Querystring _ 
      , 0 

這被稱爲子存儲過程。

sub HandleErrors(connection, WebPagePath, GenericErrorMessage, DebugInfo, Severity) 


//Check for vb errors 
if Err.Number <> 0 Then 

    Session("WebPagePath") = WebPagePath 
    Session("SafeErrorMessage") = GenericErrorMessage 'Session("SafeErrorMessage") + "A connection was dropped while trying to complete sessions." 
    Session("DebugInfo") = DebugInfo ' Err.Description 
    Session("LineNo") = Err.Line 
    Session("StackTrace") = "" 
    Session("Severity") = Severity 

    response.redirect("Error.asp") 

    //error occurs 
elseif connection.Errors.count <> 0 then 

    response.write("a database error occurred.") 
    // Store safe error message/# in session 
    Session("WebPagePath") = WebPagePath 
    Session("SafeErrorMessage") = GenericErrorMessage 'Session("SafeErrorMessage") + "An error has occurred while trying to save sessions." 
    Session("DebugInfo") = DebugInfo '"Some extra added debug info from the webpage" 
    Session("LineNo") = 0 
    Session("StackTrace") = "" 
    Session("Severity") = Severity 

    Dim objError 
    for each objError in connection.Errors 

     // Store safe error number in session 
     Session("SafeErrorNumbers") = Session("SafeErrorNumbers") + objError.Description 
     if connection.Errors.Count > 1 then 
      Session("SafeErrorNumbers") = Session("SafeErrorNumbers") + "|" 
     end if 

    next 

    response.Redirect("Error.asp") 
end if 

Err.Clear 

end sub 
+0

您是否收到錯誤? – Robert 2012-01-04 16:24:40

+0

@Robert如果我關閉「在錯誤恢復下一步」我得到的過程中提出的錯誤...這是我所期望的。如果我設置「On error resume next」,那麼重定向就不會發生,我最終坐在我的原始頁面上,沒有任何反應。 – 2012-01-04 16:37:34

+0

你可以改變一個函數,並將重定向頁面返回到調用頁面,並讓該頁面做'response.redirect()' – Robert 2012-01-04 16:46:23

回答

0

我不能解釋你爲什麼得到你的結果。我可以告訴你,如果你的代碼到達一個包含Response.Redirect的行,那麼重定向將發生,不管它是否在Sub procdure中。

我會提出這個建議。停止使用使用On Error Resume Next。處理例外情況是非常痛苦的。

而是改變HandleErrorsGenerateConnectionError。它的工作將是編寫錯誤來源和描述字符串,並故意用用戶定義的錯誤號碼(我傾向於使用1001)調用Err.Raise。現在

Error.asp應安裝在你的應用程序作爲處理程序500.100 HTTP狀態代碼的根。當發生腳本錯誤時,IIS將查找當前錯誤頁面集合以確定要執行的操作。您將設置此項以執行URL並將您的Error.asp指定爲URL。

當Error.asp執行的時候會找到有關的詳細信息頁面被請求從QueryString。在這裏,您還可以使用Server.GetLastError獲取ASPError對象,您可以從中獲取有關該錯誤的其他詳細信息。

使用這種方法將不需要開發任何腳本錯誤細節記得胡椒他們的代碼與HandleError代碼。開發人員需要記得在執行使用ADODB.Connection的代碼時調用GenerateConnectionError,即使如此,您也可以在.asp包含文件內抽象出它。

+0

安東尼你是正確的,因爲我在上面的評論中指出......簡歷旁邊隱藏了Err.Line在asp中不被支持的事實。因此,目前我已經失去了行號功能,但是其他所有功能都可以正常工作......現在,如果發生錯誤,則處理錯誤的調用現在會重定向,如果不必要,則不會。因此,我們必須做的添加錯誤處理設置在錯誤恢復下一步,然後調用handlErrors我們期望可能的錯誤。非常感謝您的幫助......您錯誤的幫助我找到了問題。 – 2012-01-05 16:00:11

+0

@Kevin:我很高興你有一個解決方案。我希望你只能在小函數中使用On Error Resume Next,而不是全局設置它。全局On Error Resume Next是一個調試噩夢,並且試圖通過Err.Number來處理錯誤只是使代碼變得混亂(這通常導致更多的錯誤)。你可能不會很高興聽到這個消息,它可能在你的應用程序中根深蒂固,無法做任何事情,但最好你知道的不是。 – AnthonyWJones 2012-01-06 13:30:44