2010-03-26 3 views
1

У меня очень сложная проблема с моим приложением asp.net, мне потребовался возраст для отслеживания, но я до сих пор не знаю, что вызывает подобное поведение.Установка переменной сеанса в Global.asax вызывает ошибки AJAX

Если я установил переменную сеанса в событии Application_PreRequestHandlerExecute, то мои внешние файлы JavaScript игнорируются и, следовательно, вызывают множество ошибок. Я упростил проблему ниже.

E.g.

я файл с именем JScript.js, содержащий код:

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

И в моем Default.aspx файл я ссылаться на JS с кодом:

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

И в случае тела onload я называю myAlert() функции:

<body onload="myAlert()"> 

И, наконец, в Global.asax файле:

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

Если запустить Default.aspx файл, вы увидите функцию JS Isnt названия, однако, если вы закомментировать строку кода Global.asax то внешний JS называется и функции выполняется при загрузке страницы.

Почему это?

+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-файла. Проблема возникает, когда событие PreRequestHandlerExecute выполняется, когда на странице ASPX запрашивается JS-файл. Сессия является NULL (или Nothing) для JS-файла, который вызывает исключение. Поскольку для JS-файла возникает исключение, содержимое этого файла (ваша функция myAlert) никогда не загружается на страницу ASPX. Поэтому страница ASPX не может вызывать функцию myAlert, потому что файл JS никогда не был загружен.

+0

Это имеет смысл. Огромное спасибо. – SausageFingers

+0

Есть ли способ проверить, какой файл вызывает PreRequestHandlerExecute для запуска? Или было бы лучше проверить, нет ли сеанса IsNot Nothing перед его использованием. – SausageFingers

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