ASP.NET MVC AJAX Sys是未定义的错误

时间:2009-06-23 22:45:53

标签: asp.net asp.net-mvc asp.net-ajax

当我尝试AJAX调用时,我在MVC应用程序中的某个页面上收到“Microsoft JScript运行时错误:'Sys'未定义”错误。 AJAX调用是从部分视图中进行的,该视图嵌入在多个页面中。它可以在除一个页面之外的所有页面上正常工作。我已经阅读了指向web.config文件设置和.axd映射的帖子作为可能的解决方案,但是在web.config中正确配置了应用程序,并且IIS中的.axd映射也是正确的。此外,它可以在使用此局部视图的所有页面上正常工作,除了一个。它表现得像AJAX库没有加载这一页。

脚本文件的引用位于共享的site.master文件中。所有页面,包括不起作用的页面,都引用相同的母版页。

有什么想法吗?我已经在这个工作了两天了。谢谢。

编辑:正如Sam在下面指出的那样,似乎AJAX调用在AJAX库有机会加载之前就已经开始了。但是,AJAX调用是在页面呈现后很长时间由提交按钮触发的,因此AJAX库有足够的时间加载 - 抱歉第一次没有提供足够的信息。

8 个答案:

答案 0 :(得分:18)

web.config中,在appsettings标记下添加以下代码行:

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

答案 1 :(得分:17)

以防万一...使用以下内容来避免路径问题

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

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

谢谢, 附庸风雅

答案 2 :(得分:4)

在Firefox中加载页面,然后使用Firebug检查页面 - 您将能够看到已加载的所有单个脚本,以及发出的所有网络请求,以及它们是否成功。这比尝试从服务器角度进行故障排除要好。

如果您使用的是IE8,则可以使用“开发者工具”窗口,但我认为Firebug更好 - 两种工具都支持JavaScript调试。

最可能的问题是,您在部分视图中运行脚本,然后依赖它的脚本才有可能加载 - 确保您在局部视图中调用的任何脚本调用仅在页面具有加载,而不是在加载过程中立即加载。

答案 3 :(得分:3)

所有上述情况都没问题。但有时开发人员忘记为ajax添加javascript文件。所以请检查一下。

答案 4 :(得分:1)

基本上你可能会遗漏:MicrosoftMvcAjax.MicrosoftMvcValidation.debugMicrosoftMvcValidation JS文件引用。

执行以下步骤:

  1. PM> Install-Package MicrosoftAjax

  2. PM> Install-Package MicrosoftMvcAjax.Mvc5

  3. 将它们包含在bundleconfig中,如下所示:

    bundles.Add(new ScriptBundle("~/bundles/mvcFoolProof")
           .Include("~/Scripts/MicrosoftAjax*",
                    "~/Scripts/MicrosoftMvcAjax*", 
                    "~/Scripts/MicrosoftMvcValidation*",
                    "~/Scripts/mvcfoolproof*",
                    "~/Scripts/MvcFoolproofJQueryValidation*",
                    "~/Scripts/MvcFoolproofValidation*"));
    
  4. 现在它应该没有任何错误。

答案 5 :(得分:0)

在以下部分添加到web.config:

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

答案 6 :(得分:0)

关于你对Sam的回应,我在很多MVC应用程序中注意到的一件事是,人们不知道如何处理相对路径和应用程序/运行时的模糊性。例如,URL重写几乎可以保证特定页面的显示深度与您预期的不同,因此../../images会指向其他位置,具体取决于您是在查看/products/widget还是{{1}即使视图可能是相同的。正如Arty指出的那样,解决这个问题的最佳方法是让引擎通过使用URL实用程序和应用程序相对路径为您完成工作,这些路径将由应用程序修复,而不管上下文如何。

答案 7 :(得分:0)

我还发现使用以下适用于ASP.NET MVC2。

 

您使用MicrosoftMvcValidation.js而不是使用MicrosoftMvcAjax.js

希望这有助于某人。