Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET MVC AJAX Sys未定义错误_Asp.net_Asp.net Mvc_Asp.net Ajax - Fatal编程技术网

ASP.NET MVC AJAX Sys未定义错误

ASP.NET MVC AJAX Sys未定义错误,asp.net,asp.net-mvc,asp.net-ajax,Asp.net,Asp.net Mvc,Asp.net Ajax,当我尝试AJAX调用时,我在MVC应用程序中的一个页面上出现了“Microsoft JScript运行时错误:'Sys'未定义”错误。AJAX调用是从嵌入在多个页面中的局部视图进行的。除了一个页面外,它在所有页面上都可以正常工作。我读过一些文章,指出web.config文件设置和.axd映射是可能的解决方案,但应用程序在web.config中配置正确,而.axd映射在IIS中也正确。另外,除了一个部分视图外,它在所有使用该部分视图的页面上都可以正常工作。这就像AJAX库没有为这一页加载一样 脚本

当我尝试AJAX调用时,我在MVC应用程序中的一个页面上出现了“Microsoft JScript运行时错误:'Sys'未定义”错误。AJAX调用是从嵌入在多个页面中的局部视图进行的。除了一个页面外,它在所有页面上都可以正常工作。我读过一些文章,指出web.config文件设置和.axd映射是可能的解决方案,但应用程序在web.config中配置正确,而.axd映射在IIS中也正确。另外,除了一个部分视图外,它在所有使用该部分视图的页面上都可以正常工作。这就像AJAX库没有为这一页加载一样

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

有什么想法吗?我已经做了两天了。谢谢


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

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

如果您使用的是IE8,您可以使用开发者工具窗口,但我认为Firebug更好——尽管这两种工具都支持JavaScript调试


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

在第节中添加到web.cofig:

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




以防万一。。。使用以下方法避免路径问题

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

资料来源:

谢谢,
Arty

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

我还发现,使用以下方法可以与ASP.NET MVC2配合使用

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


希望这对其他人有所帮助。

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

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

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

基本上您可能缺少:
MicrosoftMvcAjax.
MicrosoftMvcValidation.debug
MicrosoftMvcValidation
JS文件引用

执行以下步骤:

  • PM>安装软件包MicrosoftAjax

  • PM>安装软件包MicrosoftMvcAjax.Mvc5

  • 将它们包括在
    bundleconfig
    中,如下所示:

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

  • 现在它应该可以正常工作了,没有任何错误。

    @Sam-我已经看过firebug,当我点击脚本选项卡时,可以看到两个Ajax库都已加载。不过,我对firebug不太熟悉,所以我可能遗漏了一些东西。我经常使用fiddler,所以我明天到办公室时会看看它,以验证脚本调用没有失败。由于ajax调用是在页面呈现很久之后从submit按钮触发的,因此我排除了脚本没有机会加载的可能性。谢谢。@Sam-今天早上和Fiddler看了一眼,你猜怎么着?仅该页面的脚本文件路径不正确。我还不知道为什么,但是当我为脚本设置一个完全限定的路径时,页面工作得非常好。谢谢,我认为你的回答是正确的,因为它让我走上了正确的道路-使用一个工具,它会告诉我两天前我需要知道的:)如上所述,web.config文件配置正确。这似乎是人们应该检查的第一件事-在安装针对Microsoft Unobtrusive Ajax的nuget软件包时,出于某种原因,他们是否包括MicrosoftJax.js和MicrosoftMvcAjax.js文件。这没有添加到我的web.config中。谢谢你的提示。
    bundles.Add(new ScriptBundle("~/bundles/mvcFoolProof")
           .Include("~/Scripts/MicrosoftAjax*",
                    "~/Scripts/MicrosoftMvcAjax*", 
                    "~/Scripts/MicrosoftMvcValidation*",
                    "~/Scripts/mvcfoolproof*",
                    "~/Scripts/MvcFoolproofJQueryValidation*",
                    "~/Scripts/MvcFoolproofValidation*"));