2010-03-26 9 views
1

asp.net 응용 프로그램에 매우 특이한 문제가 있습니다. 추적하려면 나이가 들었지만 여전히 어떤 문제가 있는지 알 수 없습니다.Global.asax에서 세션 변수를 설정하면 AJAX 오류가 발생합니다.

Application_PreRequestHandlerExecute 이벤트에서 세션 변수를 설정하면 외부 JavaScript 파일이 무시되고 오류가 발생합니다. 나는 아래의 문제를 단순화했다.

예.

function myAlert() { 
alert("Hi World"); 
} 

그리고 내 Default.aspx 파일

내가 코드로 JS 참조 :

<script src="JScript.js" type="text/javascript"></script> 

그리고 몸 onload 경우에 나는 myAlert() 전화

나는 파일이 코드를 포함 JScript.js를 불렀다 기능 :

<body onload="myAlert()"> 

그리고 마지막으로 Global.asax 파일 : 당신은 당신이라는 JS 기능의 밤은을 보게 될 Default.aspx 파일을 실행하면

Private Sub Application_PreRequestHandlerExecute(ByVal sender As Object, ByVal e As EventArgs) 
    HttpContext.Current.Session("myVar") = "MyValue" 
End Sub 

은, 그러나, 당신은 외부 JS를 호출 한 후 코드 Global.asax의 라인과 기능을 주석 경우 페이지가로드 될 때 실행됩니다.

왜 이런가요?

+0

이 애플리케이션에서 와일드 카드 매핑을 사용하도록 설정 했습니까? http://weblogs.asp.net/scottgu/archive/2007/03/04/tip-trick-integrating-asp-net-security-with-classic-asp-and-non-asp-net-urls. aspx –

답변

2

PreRequestHandlerExecute 이벤트가 두 번 실행됩니다. ASPX 파일은 한 번, JS 파일은 한 번. JSX 파일이 ASPX 페이지에서 요청 될 때 PreRequestHandlerExecute 이벤트가 실행될 때 문제가 발생합니다. Session은 예외를 발생시키는 JS 파일에 대해 NULL (또는 Nothing)입니다. JS 파일에 예외가 발생하므로이 파일의 내용 (myAlert 함수)은 절대로 ASPX 페이지로로드되지 않습니다. 따라서 JS 파일을로드 한 적이 없기 때문에 ASPX 페이지 myAlert 함수를 호출 할 수 없습니다.

+0

그건 완벽하게 이해가됩니다. 매우 감사합니다. – SausageFingers

+0

PreRequestHandlerExecute가 실행되는 파일을 테스트하는 방법이 있습니까? 아니면 세션 IsNot을 사용하기 전에 아무것도 테스트하지 않는 것이 좋습니다. – SausageFingers

관련 문제