当我尝试AJAX调用时,我在MVC应用程序中的某个页面上收到“Microsoft JScript运行时错误:'Sys'未定义”错误。 AJAX调用是从部分视图中进行的,该视图嵌入在多个页面中。它可以在除一个页面之外的所有页面上正常工作。我已经阅读了指向web.config文件设置和.axd映射的帖子作为可能的解决方案,但是在web.config中正确配置了应用程序,并且IIS中的.axd映射也是正确的。此外,它可以在使用此局部视图的所有页面上正常工作,除了一个。它表现得像AJAX库没有加载这一页。
脚本文件的引用位于共享的site.master文件中。所有页面,包括不起作用的页面,都引用相同的母版页。
有什么想法吗?我已经在这个工作了两天了。谢谢。
编辑:正如Sam在下面指出的那样,似乎AJAX调用在AJAX库有机会加载之前就已经开始了。但是,AJAX调用是在页面呈现后很长时间由提交按钮触发的,因此AJAX库有足够的时间加载 - 抱歉第一次没有提供足够的信息。答案 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.debug
和MicrosoftMvcValidation
JS文件引用。
执行以下步骤:
PM> Install-Package MicrosoftAjax
PM> Install-Package MicrosoftMvcAjax.Mvc5
将它们包含在bundleconfig
中,如下所示:
bundles.Add(new ScriptBundle("~/bundles/mvcFoolProof")
.Include("~/Scripts/MicrosoftAjax*",
"~/Scripts/MicrosoftMvcAjax*",
"~/Scripts/MicrosoftMvcValidation*",
"~/Scripts/mvcfoolproof*",
"~/Scripts/MvcFoolproofJQueryValidation*",
"~/Scripts/MvcFoolproofValidation*"));
现在它应该没有任何错误。
答案 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
希望这有助于某人。