在本章下面部分,将再讨论这一问题,同时也可以了解“Cause An Error页面上的其他按钮所提供的其他种类的错误信息。注意有一些按钮能够比其他的按钮能够提供更多信息。特别是只有最后一个按钮给出ASP错误代码的值(这里是ASP 0177)。
(1) “Cause An Error页面的功能
与先前讨论的示例页面一样,引起错误的页面使用同样的技术,用<Form>把值提交给同一个页面。然后ASP程序查看窗口上点击的是那个SUBMIT按钮,然后运行代码的相应部分。同时查看是否页面上两个复选框是否选中,如果是这样,程序首先设置一个或两个会话级的变量以指明这一点。
<%
'see if we are displaying error and debug information
'set session variables to retrieve in the custom error page
If Len(Request.Form("chkShowError")) Then
;;Session("ShowError") = "Yes"
Else
;;Session("ShowError") = ""
End If
If Len(Request.Form("chkShowDebug")) Then
;;Session("ShowDebug") = "Yes"
Else
;;Session("ShowDebug") = ""
End If
...
%>
由于使用了Server.Transfer,当错误发生时,正在运行的网页的整个ASP环境由IIS传给定制错误页面。然而,脚本变量的值并没有传给定制错误页面,所以必须使用Session变量,或者把值添加到Request.Form或Request.QueryString集合以便把值传送给定制错误页面。
设置了Session变量之后,程序继续查看点击了哪个按钮。每个类型的错误(除了第一类型外),都是由运行相应的ASP代码产生的,第一类型的错误需要调用另一个页面。
...
'look for a command sent from the FORM section buttons
If Len(Request.Form("cmdSyntax")) Then
;;;Response.Clear
;;;Response.Redirect "syntax_error.asp"
End If
If Len(Request.Form("cmdParamType")) Then
;;;intDate = "error"
;;;intDay = Day(intDate)
End If
If Len(Request.Form("cmdArray")) Then
;;;Dim arrThis(3)
;;;arrThis(4) = "Causes an error"
End If
If Len(Request.Form("cmdFile")) Then
;;;Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
;;;Set objTStream = objFSO.OpenTextFile("does_not_exist.txt")
End If
If Len(Request.Form("cmdPageCount")) Then
;;;Set objPageCount = Server.CreateObject("MSWC.PageCounter")
;;;objPageCount.WrongProperty = 10
End If
If Len(Request.Form("cmdObject")) Then
;;;Set objThis = Server.CreateObject("Doesnot.Exist")
End If
%>
标签: 编程