Установка переменной сеанса в Global.asax вызывает ошибки AJAX - PullRequest
1 голос
/ 26 марта 2010

У меня очень специфическая проблема с моим приложением asp.net, мне потребовался возраст, чтобы отследить, но я все еще не знаю, что вызывает такое поведение.

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

Например

У меня есть файл с именем 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 не вызывается, однако, если вы закомментируете строку кода Global.asax, тогда вызывается внешний js и функция выполняется, когда страницазагружает.

Почему это?

1 Ответ

2 голосов
/ 26 марта 2010

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

...