2009-06-23 12 views
6

Recibo un "error de tiempo de ejecución de Microsoft JScript: el error 'Sys' no está definido" en una de mis páginas en una aplicación MVC cuando intento una llamada AJAX. La llamada AJAX se realiza desde una vista parcial que está integrada en más de una página. Funciona bien en todas las páginas excepto en una. He leído las publicaciones que apuntan a la configuración del archivo web.config y las asignaciones .axd como posibles soluciones, pero la aplicación está configurada correctamente en el web.config, y las asignaciones .axd también son correctas en IIS. Además, funciona bien en todas las páginas que usan esta vista parcial excepto una. Está actuando como que las bibliotecas AJAX no se están cargando para esta página.ASP.NET MVC AJAX Sys es un error no definido

Las referencias a los archivos de script se encuentran en el archivo site.master compartido. Todas las páginas, incluida la que no funciona, hacen referencia a la misma página maestra.

¿Alguna idea? He estado trabajando en esto por dos días. Gracias.

EDITAR: Como Sam señaló a continuación, parecería que la llamada AJAX se está disparando antes de que las bibliotecas AJAX tengan la oportunidad de cargar. Sin embargo, la llamada AJAX se desencadena con un botón de envío mucho después de que la página se haya procesado, por lo que las bibliotecas AJAX han tenido mucho tiempo para cargar; disculpe por no haber proporcionado suficiente información la primera vez.

Respuesta

3

Cargue la página en Firefox, luego use Firebug para inspeccionar la página: podrá ver todos los scripts individuales que se han cargado, además de todas las solicitudes de red que se emitieron, y si tuvieron éxito o no. Esto es mejor que intentar solucionarlo desde la perspectiva del servidor.

Si está utilizando IE8, puede usar la ventana Herramientas para Desarrolladores, pero creo que Firebug es mejor; sin embargo, ambas herramientas admiten la depuración de JavaScript.

El problema más probable es que esté ejecutando script en su vista parcial antes de que los scripts que dependía hayan tenido la oportunidad de cargar: asegúrese de que cualquier llamada de script que tenga dentro de su vista parcial solo se ejecute una vez que la página ha cargado, y no inmediatamente durante la carga.

+0

@ Sam - Ya tomó una mirada con quemador, y la puede ver las dos bibliotecas Ajax se cargan al hacer clic en la pestaña de secuencias de comandos. Aunque no estoy tan familiarizado con Firebug, me podría estar perdiendo algo. He usado mucho el violín, así que lo veré mañana cuando llegue a la oficina para verificar que la llamada de los guiones no esté fallando. Como la llamada ajax se desencadena desde un botón de envío mucho después de que la página se haya procesado, descartaría que los scripts no hayan podido cargarse. Gracias. – cnaegle

+0

@Sam - echó un vistazo con Fiddler esta mañana y ¿adivina qué? La ruta al archivo de scripts es incorrecta solo para esa página. Todavía no sé por qué, pero cuando puse una ruta de acceso completa para los scripts, la página funciona perfectamente. Gracias, estoy marcando su respuesta como correcta, ya que me envió por el camino correcto - con ayuda de una herramienta que me han dicho lo que necesitaba saber hace dos días :) – cnaegle

0

Añadir a web.cofig en la sección:

<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

Como se indicó anteriormente, el archivo web.config está configurado correctamente. – cnaegle

16

Por si acaso ... usar lo siguiente para evitar el camino problemas

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

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

Gracias, Arty

+1

Esta parece ser la primera cosa que la gente debe comprobar - si están incluidos los MicrosoftAjax.js y MicrosoftMvcAjax.js archivos –

+0

agradables. funcionó –

0

En cuanto a su respuesta a Sam, una cosa que me he dado cuenta de una gran cantidad de aplicaciones MVC es que la gente no sabe cómo tratar con la ambigüedad de las rutas relativas y la aplicación/tiempo de ejecución. Por ejemplo, la reescritura de URL garantiza que una página en particular pueda aparecer a diferentes profundidades de las previstas, por lo que ../../images apuntará a otro lugar dependiendo de si está mirando /products/widget o /products/widget/12345, aunque la vista sea la misma.Como señaló Arty, la mejor manera de lidiar con esto es dejar que el motor haga el trabajo por usted utilizando una utilidad de URL y rutas relativas a la aplicación que la aplicación arreglará independientemente del contexto.

0

También he encontrado que el uso de las siguientes obras con ASP.NET MVC2.

En lugar de utilizar MicrosoftMvcAjax.js, se utiliza MicrosoftMvcValidation.js

Espero que esto ayude a alguien.

2

Todos los casos anteriores se ok.but veces desarrollador se olvide de añadir archivos javascript para Ajax .So compruebe que también.

16

En web.config añadir la siguiente línea de código bajo appsettings etiqueta:

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

Por alguna razón, al instalar el paquete nuget para Microsoft Unobtrusive Ajax esto no se agregó a mi Web.Config. Gracias por el consejo. – coryrwest

+1

¡Esto fue todo! Pasé toda la mañana en este ... –

+0

Error más común. ¡Gracias! – mihkov

0

Básicamente Es posible que falte: MicrosoftMvcAjax., MicrosoftMvcValidation.debug y MicrosoftMvcValidation JS referencias de archivo.

hacer los siguientes pasos:

  1. PM> Install-Package MicrosoftAjax

  2. PM> Install-Package MicrosoftMvcAjax.Mvc5

  3. incluirlos en bundleconfig, como a continuación:

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

Ahora debería funcionar sin ningún error.

Cuestiones relacionadas