Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Actualités

  • Blog de Cyril DURAND, passionné de JavaScript, Ajax, ASP.net et tout ce qui touche au developpement Web Client-Side.

    View Cyril Durand's profile on LinkedIn

    hit counters

Sys is undefined - Erreur JavaScript avec Microsoft Ajax

Je débute ici une nouvelle série de post du style Question/Réponse/Explication. Il s'agit dans la plupart des cas de questions posés sur le forum aspfr.com ou des questions que l'on me pose directement par mail, msn, ... Le but de cette série est d'abord de partager mon expérience pour vous aidez à corriger vos problèmes mais à la différence es réponses que je donne sur les forums il y aura un point d'explication qui explique plus précisément le problème ainsi que la solution, autrement dit le but n'est pas seulement de vous donner la réponse mais d'expliquer la réponse.

Question :

J'utilise le contrôle UpdatePanel dans ma page mais cela ne fonctionne pas, lorsque je clique sur un bouton toute ma page est rafraichit. Voici le code que j'utilise :

<asp:UpdatePanel id="UpdatePanel1" runat="server"> <contenttemplate> <asp:Label id="Label1" runat="server" Text="Label"></asp:Label> </contenttemplate> <Triggers> <asp:AsyncPostBackTrigger ControlID="Button1" /> </Triggers> </asp:UpdatePanel> <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />

J'ai aussi remarqué que lorsque je clique sur mon bouton j'ai un message d'erreur JavaScript : "Sys is undefined".

Réponse :

Le problème vient surement du Web.Config, celui ci n'a pas été modifié pour que Microsoft Ajax puisse fonctionner. Il faut au minimum rajouter cette ligne :

<configuration> <system.web> <httpHandlers> <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/> ... </httpHandlers> ... </system.web> ... </configuration>

Explication :

L'erreur "Sys is undefined" pour IE ou "Sys is not defined" pour FF se produit car les fichiers JavaScript de Microsoft Ajax sont indisponible, en effet le ScriptManager va inclure automatiquement les fichiers JavaScript nécessaire au bon fonctionnement du framework client de Microsoft Ajax via ces lignes :

<script src="/ScriptResource.axd?d=V68EtXOYFP73VAKIPaON5vTPHqkLheZqF3UnjXvq8wo-r7vNdqoQSbbVauLUz-mhCwTRANBlv4c3z-L4yfWZdH3gjUwtKrMOUx5U_0sq8ys1&amp;t=633051893704717150" type="text/javascript"></script> <script src="/ScriptResource.axd?d=V68EtXOYFP73VAKIPaON5vTPHqkLheZqF3UnjXvq8wo-r7vNdqoQSbbVauLUz-mhCwTRANBlv4c3z-L4yfWZdBOq_-pc4gkOWg2S9Y-HfYU_52eTu-Lu2M9kaAkvwx340&amp;t=633051893704717150" type="text/javascript"></script>

Il va aussi faire appel à la fonction Sys.Application.initialize(); pour initialiser le framework client. Cette fonction est définit dans les fichiers JavaScript ajouté plus haut. C'est là que se situe le problème en effet si vous analyser les requêtes HTTP avec Fiddler vous voyez que les 2 fichiers ScriptResource.axd retourne une erreur 404. Ces pseudo-fichiers permettent de retourner un fichier de ressource stocké dans l'assembly System.Web.Extensions.dll. Pour que cela fonctionne il faut absolument enregistrer le handler System.Web.Handlers.ScriptResourceHandler dans le web.config.

La ligne a rajouté est la ligne minimal pour faire fonctionner les UpdatePanels, pour un fonctionnement optimal de Microsoft Ajax il faut rajouter d'autres lignes, un fichier de config exemple est disponible ici : "C:\Program Files\Microsoft ASP.NET\ASP.NET 2.0 AJAX Extensions\v1.0.61025\web.config"

Autres pistes de recherche :

  • Regarder avec fiddler les requêtes http pour voir si les fichiers de ressources sont OK.
  • Regarder si vous ne redéfinissez pas le namespace Sys quelque part dans votre page.
Posted: jeudi 10 mai 2007 15:14 par cyril
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

ostenhard a dit :

Bonjour,

Cet article est très intéressant surtout que je rencontre le problème du 'Sys' is not defined en ce moment. En regardant avec Fiddler, je me suis rendu compte que, pour les ressources WebResource.axd et ScriptResource.axd, il y avait un retour indiquant qu'elles étaient introuvables.

Je suis donc à la recherche d'une solution sachant que mon web.config est correct (enfin peut-être pas) c'est-à-dire que la ligne ScriptResourceHandler est bien là.

Cordialement !

# septembre 17, 2007 20:27

cyril a dit :

Bonjour,

Quand tu dis que les fichiers WebResource.axd et ScriptResource.axd sont introuvable, c’est bien que tu as une erreur 404 ? Je ne vois pas de raisons qui fait que WebResource.axd tombe en 404. L’url est bien du genre http://host/[applicationName/]webresource.axd ? Je peux voir le web.config ?

L’handler WebResource.axd est configuré au niveau du web.config principal (C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\web.config), c’est donc étonnant qu’il ne soit pas trouvé …

A bientôt,

# septembre 18, 2007 16:08

The Ugly a dit :

Bonjour,

je ne sais pas si j'avais exactement le même problème, en tout cas, mon updatepanel rechargait toute la page a chaque fois.

Je me suis rendu compte en analysant les réponses du serveur que le fichier WebResource.axd n'était pas transféré.

Apres 5 heures de recherche, j'ai finalement vu que la propriété

<xhtmlConformance mode="Legacy" />

# janvier 16, 2008 12:30

The Ugly a dit :

... j'ai finalement vu que la propriété

<xhtmlConformance mode="Legacy" />

# janvier 16, 2008 12:36

The Ugly a dit :

Un petit problème avec le code apparemment, désolé.

Je disais donc qu'il fallait commenter cette propriété pour que cela fonctionne.

En espérant avoir été utile,

Cordialement.

# janvier 16, 2008 13:15

cyril a dit :

Je viens de chercher, je croyais l'avoir bloggé mais non,

ASP.net Ajax n'est pas compatible avec le XhtmlConformance mode Legacy ... (c'est un des innombrables "bugs")

# janvier 16, 2008 14:01

riton a dit :

Bonjour,

Tout d'abord je tiens a te remercier pour ce blog qui m'a déjà souvent aidé.

Mais cette fois-ci je coince, j'obtiens une erreur "Sys is not defined" sur une des pages de mon site. J'utilise Ajax dans toutes les pages, mon web.config est bien paramétré, je n'ai aucune erreur de compilation et n'utilise aucun script avant l'appel de mon ScriptManger.

Mais je n'ai aucune trace d'appel des scripts "ScriptResource.axd" ou "WebResource.axd" coté client. (ce qui explique mon Sys not defined)

Y aurait-il une autre piste à explorer?

Merci d'avance.

# avril 20, 2008 19:11

riton a dit :

J'ai trouvé, c'était simplement un oubli.

Il ne faut surtout pas oublier la ligne :

"base.OnPreRenderComplete(e);"

lorsqu'on surcharge la méthode OnPreRenderComplete.

# avril 21, 2008 09:25
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Disparition de variables de session PHP après une redirection ? par MadMatt le il y a 9 heures et 39 minutes

- [MOSS 2007] Publier ses formulaires InfoPath via feature par Adrien Siffermann le il y a 12 heures et 46 minutes

- Imagine Cup 2008 - Paris - Les résultats par TheSaib .NET blog le il y a 14 heures et 8 minutes

- L'Egypte accueille Imagine Cup 2009 par Code is poetry le il y a 14 heures et 20 minutes

- PowerShell : Mise en ligne de fonctions intéressantes pour SharePoint par Blog Technique de Romelard Fabrice le il y a 15 heures et 28 minutes

- Raccourcis clavier et CRM 4 par Clark, C#, MSCRM, SBS le il y a 19 heures et 33 minutes

- [Silverlight] Comment échanger des données entre une application Silverlight et une page ASP.NET via cookies ? par Thomas Lebrun le il y a 20 heures et 9 minutes

- SharePoint 2007 : Trouver les fichiers CheckOut dans une librairie de document par Philippe Sentenac [MVP SharePoint] le il y a 22 heures et 37 minutes

- [Open XML] Travailler avec Open XML : Linq To XML (Partie 2 - Requêtes/XPath) par Julien Chable le 07-08-2008, 02:05

- [Open XML] Travailler avec Open XML : Linq To XML (Partie 1 - Namespace) par Julien Chable le 07-08-2008, 00:44