2010-03-26 8 views
1

Je rencontre un problème très particulier avec mon application asp.net, il m'a fallu un âge pour traquer mais je ne sais toujours pas ce qui cause ce comportement.La définition d'une variable de session dans Global.asax provoque des erreurs AJAX

Si je mets une variable de session en cas Application_PreRequestHandlerExecute, mes fichiers JavaScript externes sont ignorés, et provoquant therfore une série d'erreurs. J'ai simplifié le problème ci-dessous.

E.g.

J'ai fichier appelé JScript.js contenant le code:

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

Et dans mon dossier Default.aspx je référence à la js avec le code:

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

Et dans le cas corps onload j'appelle le myAlert() fonction:

<body onload="myAlert()"> 

Et enfin dans le fichier Global.asax:

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

Si vous exécutez le fichier Default.aspx vous verrez la fonction js n'appelle pas, cependant, si vous commentez la ligne de code Global.asax puis est appelé les js externes et la fonction exécuté lorsque la page se charge.

Pourquoi est-ce?

+0

Avez-vous activé le mappage de caractères génériques pour cette application? http://weblogs.asp.net/scottgu/archive/2007/03/04/tip-trick-integrating-asp-net-security-with-classic-asp-and-non-asp-net-urls. aspx –

Répondre

2

L'événement PreRequestHandlerExecute s'exécute deux fois. Une fois pour le fichier ASPX et une fois pour le fichier JS. Le problème se produit lorsque l'événement PreRequestHandlerExecute s'exécute lorsque le fichier JS est demandé par la page ASPX. Session est NULL (ou Nothing) pour le fichier JS qui provoque une exception. Comme une exception se produit pour le fichier JS, le contenu de ce fichier (votre fonction myAlert) n'est jamais chargé dans la page ASPX. Par conséquent, la page ASPX ne peut pas appeler la fonction myAlert car le fichier JS n'a jamais été chargé.

+0

Cela prend tout son sens. Merci beaucoup. – SausageFingers

+0

Existe-t-il un moyen de tester quel fichier provoque l'exécution de PreRequestHandlerExecute? Ou serait-il préférable de tester si la session n'est rien avant de l'utiliser. – SausageFingers