2013-05-17 5 views
1

У меня возникли проблемы с переменной Session на классическом ASP. В строке 19 следующего кода, я получаю «Несоответствие типа:„я“» ошибкаКлассическое несоответствие типа ASP

  • debug.asp является модуль, включенный в session.asp, другой модуль в моей программе
<% 
'---------------------------------------------------------------------------- 
' File:   /include/script/debug.asp 
' Author:  Vladimir Charkot 
' Create Date: 15/05/2013 
' Description: Generate a server debug log on client 
'---------------------------------------------------------------------------- 


Redim debugTable(2,0) 

Sub initDebug(debugLevel) 
    Session("debugEntries") = 0 
    Session("debugLevel") = "e" 
    Call debugMsg("e","Debug initialized") 
End Sub 

Sub debugMsg(lv, str) 
    If IsEmpty(Session("debugEntries")) Then 
     i = 0 
    Else 
     i = Session("debugEntries") <-- Line 21, Type mismatch error IF CInt() IS APPLIED TO SESSION VARIABLE 
    End If 
    i = i + 1      <-- Line 23, Type mismatch error 
    Redim Preserve debugTable(2,i) 
    debugTable(0,i-1) = lv 
    debugTable(1,i-1) = str 
    Session("debugEntries") = CInt(i) 
End Sub 

Function debugToClient() 
    Dim list 
    Dim func 
    list = jsDebugList() 
    func = jsDebugFunction(list) 
    debugToClient = func 
End Function 

Function jsDebugList() 
    Dim i 
    Dim list 
    If IsEmpty(Session("debugEntries")) Then 
     i = 0 
    Else 
     i = Session("debugEntries") 
    End If 
    list = "[" 
    for n = 0 to i - 2 
    'Add the last one outside the loop 
     list = list & "{debugLevel : """ & debugTable(0,n) & """, message : """ & debugTable(1,n) & """}, " 
       ' i.e.: {debugLevel : "e", message : "Error on application"}, 
    next 
    list = list & "{debugLevel : """ & debugTable(0,n) & """, message : """ & debugTable(1,n) & """}" 
    list = list & "]" 
    jsDebugList = list 
End Function 

Function jsDebugFunction(l) 
    Dim f 
    f =  "function debug(){" 
    f = f & " debugList = " & l & ";" 
    f = f & " for (elem in debugList){" 
    f = f & "  console.log(elem.debugLevel + "": "" + elem.message);" 
    f = f & " }" 
    f = f & "}" 
    jsDebugFunction = f 
End Function 


%> 
  • Вот session.asp соответствующий код, где отладки подлодки и функции называются
<!-- #include virtual="/gu/include/script/debug.asp" --> 

sub InitSession() 
    (...stuff...) 
    Call initDebug("e") 
end sub 

sub CheckSession() 

    ' If not a new session, this code has already been executed. 
    if stuff then 
     timeout() 
    end if 

    Call debugMsg("e", "CheckSession() Executed") 

end sub 
  • Наконец, session.asp включен на моей странице файл, тот, который я называю открытым на моем браузере, и возвращает ошибку несоответствия типов.

Надеюсь, вы можете мне помочь, я действительно думаю, что я уже все пробовал. Кроме Вуду, черной магии и тому подобного. Спасибо!

+0

Какое значение для сессии («debugEntries») в строке 17? Можете ли вы выполнить Response.Write и проверить значение до вызова строки 18? – Csharp

+0

Я попробую. В первый раз это будет 0, но я проверю. Отличное предложение. – Vladimir

ответ

2

Вы звоните debugMsg() метод перед вызовом initDebug() метода, который вызывает Session("debugEntries") быть пустыми, что, оказывается, просто пустая строка.

При попытке преобразовать строку в целое число вы действительно получите ошибку «Ошибка несоответствия типа», обратите внимание, что i = i + 1 попытается автоматически конвертировать.

Чтобы решить эту проблему, либо убедитесь, что всегда называют initDebug() первым или добавить «безотказного» код:

If Session("debugEntries")="" Then 
    i = 0 
Else 
    i = CInt(Session("debugEntries")) 
End If 
i = i + 1 
+0

И это, люди, почему вы не доверяете автоматически называемым методам. Это сработало! Благодаря! : D – Vladimir

+0

@ Владымир приветствует, но что вы подразумеваете под «автоматически называемым»? ASP не просто вызовет метод самостоятельно. –

+0

Хорошо, нет, это не сработало. После применения отказоустойчивости ошибка переместилась в строку «for n = 0 to i-2» в функции jsDebugList(), и я догадался, что это просто вопрос применения этого изменения в каждой точке, где это необходимо. Однако после этого я снова получаю ту же ошибку в той же строке, т. Е.Тип несоответствия в строке 21 теперь: // Если IsEmpty (Session ("debugEntries")) Затем // i = 0 // Else // i = Session ("debugEntries") <- Строка 21 // End If // я = я + 1 Если я пытаюсь использовать CInt() на переменную сеанса я получаю тип несоответствия: '' CInt :( – Vladimir

1

Сессии «числа» - это фактически строки. Если вы хотите целое использование:

i = CInt(Session("debugEntries")) 
+0

О, извините, я забыл указать, что я уже пробовал это, и если я пойду на это, ошибка будет несовместима с типом: «CInt» в строке 18 вместо этого. – Vladimir

Смежные вопросы