2009-06-23 7 views
6

Je reçois une erreur d'exécution Microsoft JScript: 'Sys' est indéfini "sur une de mes pages dans une application MVC lorsque je tente un appel AJAX. L'appel AJAX est créé à partir d'une vue partielle intégrée dans plusieurs pages. Cela fonctionne bien sur toutes les pages sauf une. J'ai lu les messages pointant vers les paramètres du fichier web.config et les mappages .axd comme solutions possibles, mais l'application est correctement configurée dans le fichier web.config et les mappages .axd sont également corrects dans IIS. De plus, cela fonctionne bien sur toutes les pages qui utilisent cette vue partielle sauf une. Il agit comme si les bibliothèques AJAX ne chargeaient pas pour cette page.ASP.NET MVC AJAX Sys est une erreur indéfinie

Les références aux fichiers de script se trouvent dans le fichier site.master partagé. Toutes les pages, y compris celle qui ne fonctionne pas, font référence à la même page maître.

Des idées? Je travaille sur celui-ci depuis deux jours maintenant. Merci.

EDIT: Comme Sam l'a souligné ci-dessous, il semblerait que l'appel AJAX se déclenche avant que les librairies AJAX aient une chance de charger. Mais, l'appel AJAX est déclenché par un bouton de soumission longtemps après le rendu de la page, de sorte que les bibliothèques AJAX ont eu beaucoup de temps à charger - désolé de ne pas donner suffisamment d'informations la première fois.

Répondre

3

Chargez la page dans Firefox, puis utilisez Firebug pour inspecter la page - vous pourrez voir tous les scripts individuels qui ont été chargés, plus toutes les demandes réseau qui ont été émises, et si elles ont réussi ou non. C'est mieux que d'essayer de dépanner du point de vue du serveur.

Si vous utilisez IE8, vous pouvez utiliser la fenêtre Outils de développement, mais je pense que Firebug est meilleur - les deux outils supportent le débogage JavaScript. Le problème le plus probable est que vous exécutez le script dans votre vue partielle avant que les scripts dont il dépend aient eu une chance de charger - assurez-vous que tous les appels de script que vous avez dans votre vue partielle ne s'exécuteront qu'une fois la page a chargé, et pas immédiatement pendant le chargement.

+0

@Sam - J'ai déjà jeté un œil avec firebug et je peux voir que les deux bibliothèques Ajax sont chargées lorsque je clique sur l'onglet des scripts. Cependant, je ne suis pas très familier avec firebug, alors il me manque peut-être quelque chose. J'ai beaucoup utilisé le violoneux et je vais y jeter un coup d'œil demain quand j'arriverai au bureau pour vérifier que l'appel pour les scripts ne manque pas. Puisque l'appel ajax est déclenché à partir d'un bouton de soumission longtemps après que la page ait été rendue, je voudrais exclure que les scripts n'ont pas eu la chance de charger. Merci. – cnaegle

+0

@Sam - a jeté un coup d'oeil avec Fiddler ce matin et devinez quoi? Le chemin d'accès au fichier de scripts est incorrect pour cette page uniquement. Je ne sais pas encore pourquoi, mais quand je mets un chemin complet pour les scripts, la page fonctionne parfaitement. Merci, je marque votre réponse comme correcte car elle m'a envoyé le bon chemin - en utilisant un outil qui m'aurait dit ce que j'avais besoin de savoir il y a deux jours :) – cnaegle

0

Ajouter à web.cofig dans la section:

<remove verb="*" path="*.asmx"/> 

<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> 

<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> 

<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"/> 

<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> 

+0

Comme indiqué ci-dessus, le fichier web.config est correctement configuré. – cnaegle

16

Juste au cas où ... utilisez ce qui suit pour éviter chemin issues

<script src="<%= Url.Content("~/Scripts/MicrosoftAjax.debug.js") %>" 
    type="text/javascript"></script> 
<script src="<%= Url.Content("~/Scripts/MicrosoftMvcAjax.debug.js") %>" 
    type="text/javascript"></script> 

Source: http://msdn.microsoft.com/en-us/library/dd381533.aspx

Merci, Arty

+1

Cela semble être la première chose que les gens devraient vérifier - qu'ils incluent les fichiers MicrosoftAjax.js et MicrosoftMvcAjax.js –

+0

sympa. cela a fonctionné –

0

En ce qui concerne votre réponse à Sam, une chose que je l'ai remarqué dans beaucoup d'applications MVC est que les gens ne savent pas comment faire face avec l'ambiguïté des chemins relatifs et l'application/runtime. Par exemple, la réécriture d'URL garantit à peu près qu'une page particulière peut apparaître à des profondeurs différentes de celles prévues, donc ../../images pointera ailleurs si vous regardez /products/widget ou /products/widget/12345, même si la vue peut être la même.Comme Arty l'a souligné, la meilleure façon de gérer cela est de laisser le moteur faire le travail pour vous en utilisant un utilitaire d'URL et des chemins relatifs à l'application qui seront corrigés par l'application, quel que soit le contexte.

0

J'ai également constaté que l'utilisation des travaux suivants avec ASP.NET MVC2.

Au lieu d'utiliser MicrosoftMvcAjax.js, vous utilisez MicrosoftMvcValidation.js

Hope this helps quelqu'un.

2

Tous les cas ci-dessus sont ok.Mais parfois développeur oublier d'ajouter des fichiers javascript pour ajax .So s'il vous plaît vérifier également.

16

Dans web.config ajoutez la ligne suivante de code sous appsettings tag:

<add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
+0

Pour une raison quelconque lors de l'installation du package nuget pour Microsoft Unobtrusive Ajax, cela n'a pas été ajouté à mon Web.Config. Merci pour le conseil. – coryrwest

+1

C'était ça! Passé toute la matinée sur celui-ci .. –

+0

Erreur la plus commune. Merci! – mihkov

0

Fondamentalement, vous pourriez manquer: MicrosoftMvcAjax., MicrosoftMvcValidation.debug et MicrosoftMvcValidation références de fichier JS.

Effectuez les étapes ci-dessous:

  1. PM> Install-Package MicrosoftAjax

  2. PM> Install-Package MicrosoftMvcAjax.Mvc5

  3. les inclure dans bundleconfig comme ci-dessous:

    bundles.Add(new ScriptBundle("~/bundles/mvcFoolProof") 
         .Include("~/Scripts/MicrosoftAjax*", 
           "~/Scripts/MicrosoftMvcAjax*", 
           "~/Scripts/MicrosoftMvcValidation*", 
           "~/Scripts/mvcfoolproof*", 
           "~/Scripts/MvcFoolproofJQueryValidation*", 
           "~/Scripts/MvcFoolproofValidation*")); 
    

Maintenant, cela devrait fonctionner sans aucune erreur.