系统是未定义的

我有一个ASP.Net / AJAX控制工具包项目,我正在努力。 80%的时间没有问题。 该页面应该运行。 如果刷新页面,它有时会显示一个JavaScript错误“Sys is undefined”。

它不会一直发生,但它是可重复的。 发生这种情况时,用户必须closures浏览器并重新打开页面。

这使我相信它可能是一个IIS设置。

另一个说明。 当我得到错误时,我查看了页面源代码。 当页面抛出错误时,下面的代码丢失了:

<script src="/ScriptResource.axd?d=EAvfjPfYejDh0Z2Zq5zTR_TXqL0DgVcj_h1wz8cst6uXazNiprV1LnAGq3uL8N2vRbpXu46VsAMFGSgpfovx9_cO8tpy2so6Qm_0HXVGg_Y1&amp;t=baeb8cc" type="text/javascript"></script> <script type="text/javascript"> //<![CDATA[ if (typeof(Sys) === 'undefined') throw new Error('ASP.NET Ajax client-side framework failed to load.'); //]]> </script> 

我解决了我的问题,将包含Sys。*调用的<script type="text/javascript"></script>块下移(到body <asp:Content/>部分closures之前的最后一项)页面上的HTML。 我最初有我的脚本块在我的页面的HEAD <asp:Content/>部分。 我在一个拥有MasterPageFile的页面里面工作。 希望这可以帮助别人。

当我遇到错误

  • 系统是未定义的
  • ASP.NET Ajax客户端框架未能加载

在IE 2.0中使用ASP.NET Ajax控件时,我需要在<system.web>标签内的web.config文件中添加以下内容:

 <httpHandlers> <remove verb="*" path="*.asmx"/> <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> <add verb="GET" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler" validate="false"/> </httpHandlers> 

尝试设置你的ScriptManager。

 <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" /> 

您必须在web.config中添加这些行

 <httpHandlers> <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"/> </httpHandlers> <httpModules> <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> </httpModules> </system.web> 

希望这可以帮助。

院长L的答案, https: //stackoverflow.com/a/1718513/292060为我工作,因为我打电话给Sys还为时尚早。 由于我正在使用jQuery,而不是将其放下,所以我把脚本放在一个document.ready调用中:

 $(document).ready(function () { Sys. calls here }); 

这似乎是足够晚的Sys可用。

我正在使用telerik,并有完全相同的问题。

将此添加到web.config解决了我的问题:)

 <location path="Telerik.Web.UI.WebResource.axd"> <system.web> <authorization> <allow users="*"/> </authorization> </system.web> </location> 

也许它也会帮助你。 这是身份validation问题。

资源

除了确保您的页面上有ScriptManager,还需要确保您的web.config已经过适当configuration。

当ASP.NET AJAX 1.0发布(用于.NET 2.0)时,有很多自定义的web.config设置添加了处理程序,控件等。

你会在这里findconfiguration信息: http : //www.asp.net/AJAX/documentation/live/ConfiguringASPNETAJAX.aspx

尝试以下解决scheme之一:

1.浏览器无法加载压缩的脚本

如果您在IE6上发生错误,通常会出现这种情况,但在其他浏览器上则不会。

脚本资源处理程序 – ScriptResource.axd在将脚本返回到浏览器之前压缩脚本。 在RTM之前的版本中,处理程序一直为所有浏览器完成,而且不可configuration。 IE6的某个组件中存在一个问题,即无法正确加载压缩的脚本。 请参阅知识库文章。 在RTM构build中,我们为此做了两个修复。 一,如果IE6是浏览器客户端,我们不压缩。 二,我们现在做压缩configuration。 以下是如何切换web.config。

你如何解决它? 首先,确保您使用的是AJAX Extensions 1.0 RTM版本。 这应该够了。 您也可以尝试通过编辑您的web.config来closures压缩以具有以下内容:

 <system.web.extensions> <scripting> <scriptResourceHandler enableCompression="false" enableCaching="true" /> </scripting> </system.web.extensions> 

2. ScriptResourceHandler所需的configuration对于您的应用程序的web.config不存在

确保您的web.config文件包含扩展安装提供的默认web.config文件中的条目。 (默认位置:C:\ Program Files \ Microsoft ASP.NET \ ASP.NET 2.0 AJAX扩展\ v1.0.61025)

3.您用于Web的虚拟目录没有被正确标记为应用程序(因此configuration未被加载) – 这将在IIS网站上发生。

确保您使用的是Web应用程序,而不仅仅是一个虚拟目录

4. ScriptResource.axd请求返回404

这通常指向整个ASP.NET的错误configuration。 在ASP.NET的默认安装中,对以.axd结尾的资源的任何Web请求都通过isapi映射从IIS传递到ASP.NET。 另外映射被configuration为不检查文件是否存在。 如果该映射不存在,或者检查文件是否存在未被禁用,则IIS将尝试查找物理文件ScriptResource.axd,将不会find它,并返回404。

您可以通过从这里将完整的url粘贴到ScriptResource.axd来查看是否存在问题,并查看它返回的内容

 <script src="/MyWebApp/ScriptResource.axd?[snip - long query string]" type="text/javascript"></script> 

你如何解决这个问题? 如果ASP.NET没有正确安装,您可以运行“aspnet_regiis.exe”命令行工具来修复它。 它位于C:\ WINDOWS \ Microsoft.Net \ Framework \ v2.0.50727。 您可以运行“aspnet_regiis -i -enable”,它使用IIS完成ASP.NET的完整注册,并确保在IIS6中启用了ISAPI。 您也可以运行“aspnet_regiis -s w3svc / 1 / root / MyWebApp”来仅修复您的Web应用程序的注册。

5.在IIS 7下解决ASP.NET AJAX RTM中的“Sys is undefined”错误

把这个条目放在<system.webServer/><handlers/>

 <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> 

并删除<system.web/><httpHandlers/>

参考文献: http : //weblogs.asp.net/chrisri/demystifying-sys-is-undefined http://geekswithblogs.net/lorint/archive/2007/03/28/110161.aspx

确保所有与.NET AJAX交互的客户端脚本在最后都有以下行:

 if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded(); 

这告诉脚本pipe理器,整个脚本文件已经加载,并且可以开始调用客户端方法

我遇到了同样的问题,经过多次争论之后,我决定尝试隔离问题,并简单地将脚本pipe理器加载到空白页面中,这仍然导致了相同的错误。 通过比较我的网站的web.config与一个全新的(工作)testing网站,发现问题已经隔离了,这个网站在system.web部分将<compilation debug="true">更改为<compilation debug="false">我的web.config修复了这个问题。

我还必须从system.web中删除<xhtmlConformance mode="Legacy"/>条目,以使更新面板正常工作。 点击这里查看这个问题的描述。

我通过创build单独的asp.net ajax解决scheme解决了这个问题,并将所有ajaxconfiguration从web.config复制并粘贴到工作项目中。

这里是你应该在web.config中设置的必须的configuration

  <configuration> <configSections> <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"> <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"> <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/> </sectionGroup> </sectionGroup> </configSections> 
  <assemblies> <add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> </assemblies> </compilation> <httpHandlers> <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"/> </httpHandlers> <httpModules> <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> </httpModules> </system.web> <system.webServer> <validation validateIntegratedModeConfiguration="false"/> <modules> <add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> </modules> <handlers> <remove name="WebServiceHandlerFactory-Integrated"/> <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> </handlers> </system.webServer> 

如果以上都不适用于您,并且您恰好在重写OnPreRenderComplete,请确保您调用base.OnPreRenderComplete。 我的治疗师会很高兴看到我回来

将AjaxControlToolkit.dll从4.1.60623.0更新到最新版本4.1.7.725后,我遇到了同样的问题。 我search了这个页面,但没有任何答案对我有帮助。 查看CodePlex zip文件中的Ajax Control Toolkit示例网站后,我发现<asp:ScriptManager>由新的<ajaxtoolkit:ToolkitScriptManager>所取代。 我这样做,没有任何Sys.Extended是未定义的

在我的情况下,问题是我已经把下面的代码保留在部分回发后的gridview tableheader:

  protected override void OnPreRenderComplete(EventArgs e) { if (grv.Rows.Count > 0) { grv.HeaderRow.TableSection = TableRowSection.TableHeader; } } 

删除此代码可以解决问题。

有一个类似的问题,除了我的网页始终生成系统是未定义的错误。

对我来说,这个问题源于我刚安装了.NET 2.0的AJAX 1.0扩展,但已经在Visual Studio中创build了我的Web项目。

当试图创buildAJAX控件时,我一直遇到这个错误,我在这里发现了Slace和MadMax1138s的post。 并认为这是我的web.config,我使用新的“启用AJAX的网站”项目types创build了一个新的项目,果然web.config有大量的自定义必要使用AJAX控件。

我刚刚更新了web.config的web.config更新,我已经做了自己,并把它放到我现有的项目,一切工作正常。

请请检查服务器是否有正确的时间和date设置…

浪费了6个小时后,我读了一些地方

服务器的date和时间必须更新才能正常工作…

否则你会得到'Sys'是未定义的错误。

我今天看到了完全相同的错误,但它不是一个configuration或直接的JavaScript问题。

一个外部的.net项目已经更新,但在网站的编译中没有正确地find这些更改。 我的推测是,ASP.NET AJAX无法正确构build.NET对象的客户端表示,因此无法正确加载。

为了解决这个问题,我重build了外部项目,并重build了我遇到问题的解决scheme。 问题消失了。

使用Ajax控件工具包ToolkitScriptManager和URL写入2.0的组合时发现错误。

在我的<rewrite> <outboundRules>我有一个先决条件:

 <preConditions> <preCondition name="IsHTML"> <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html"/> </preCondition> </preConditions> 

但显然我的一些出境规则并没有设置为使用前提条件。

一旦我在我的所有出站规则中设置了preCondition:

 <rule preCondition="IsHTML" name="MyOutboundRule"> 

没有更多的问题。

确保你没有任何改变你的url的重写规则。

在我的情况下,应用程序认为这只是更深层次的url到达。

例如: http : //mysite.com/app/page.aspx是真正的url。 但我切断/应用程序/这对ASP.net和WCF的罚款,但显然不适用于Ajax。

我遇到过类似的问题,但是我发现我的一个开发人员将web.config保存在与web123.config相同的文件夹/解决scheme中,并且错误地将这两个file upload了。

一旦我删除了web123.config文件,这个错误消失了,Ajax框架加载正确。 即使我有

 <compilation debug="true"> 

在我的情况下,我也有以下部分。 我的项目是使用框架3.5

  <httpHandlers> <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"/> </httpHandlers> <httpModules> <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> </httpModules> </system.web> 

这听起来很愚蠢,但是我也遇到了VS2010中开发的一个类似的问题,并且在VS Dev Server中托pipe。 有问题的页面有一个脚本pipe理器来创build一个wcf服务的连接。 我添加了一个额外的方法到服务,这个错误开始出现。

对于我来说固定的是在oroject Web设置中使用不同的端口号从“自动分配端口”更改为“特定端口”。

我希望我知道为什么…

开发环境:

  • Dev-Env:VS 2012
  • FX:4.0 / 4.5
  • 实现:Master(ScriptManager + UpdatePanel / Timer)+ Content(UpdatePanel)
  • 模式:PageRouting。

免责声明:

如果所有的web.config解决scheme都不适合你,并且已经实现了PageRouting(IIS 7+),那么下面的代码片段将解决你的问题。

背景:

不要吝啬这个问题,但有其他人一样的问题,并执行100%的build议,对.NET 4.0 / 4.5稍作修改,并没有一个为我工作。

在我的情况下,我实施了页面路由 ,这是鬼影我的问题。 基本上它会工作大约20左右,debugging运行,然后BAM会出错与Sys is undefined错误。

在回顾了其他一些post之后,我们讨论了Clean-URL逻辑,我记得我已经完成了PageRouting设置。

这是我用来build立我的模式的资源: 页面路由

我的单行代码修复了我的VS2012debugging问题:

 rts.Ignore("{resource}.axd/{*pathInfo}") 'Ignores any Resource cache references, used heavily in AJAX interactions. 

即使在为webconfiguration添加正确的条目仍然得到这个错误? 这个错误的最常见的原因是过早引用Sys名字空间的JavaScript。 然后最明显的解决方法是将Script脚本块移到ScriptManager控件下面:

我不认为这一点已被添加,因为我只是花了一些时间来寻找这个问题,我希望它可以帮助。

我正在使用IIS 7并使用ASP.NET v4框架。
在我的情况下,一个条目被添加到web.config文件中的条目和部分很重要的。

我的web.config文件有很多处理程序,在我的情况下,最简单的方法是将ScriptResources条目添加到处理程序部分的顶部。 最重要的是,它需要放置在作为通配符并捕获请求的任何条目之前。 在通配符条目之后添加它会导致它被忽略,错误仍会出现。

该模块可以添加到该部分的顶部或底部。

Web.config示例:

 <system.webServer> <handlers> <clear /> <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> <!-- Make sure wildcard rules are below the ScriptResource tag --> </handlers> <modules> <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> <!-- Other modules are added here --> </modules> </system.webServer> 

我有同样的问题,但我解决了:

将脚本文件放入页面时,确保它是

 <script></script> and not <script />. 

我遵循这个: http : //forums.asp.net/t/1742435.aspx?An+element+with+id+form1+could+not+be+found+Script+error+on+page+load

希望这会有所帮助

 if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded(); 

请检查在这里input链接描述

在我的情况下,我发现了一个非常隐藏的原因…在Global.ascx.cs中有这个页面路线,它不会出现在我的testing中的子文件夹,但始终返回问题错误..另一个一天有奇怪的问题。

 routes.MapPageRoute("siteDefault", "{culture}/", "~/default.aspx", false, new RouteValueDictionary(new { culture = "(\\w{2})|(\\w{2}-\\w{2})" })); 

我讨厌join这样一个巨大的话题,但是我认为我至less有一个解决scheme是VS2015。

我正在寻找findsys错误的原因,唯一的解决scheme是在ScriptManager添加EnableCdn="true" ,如下所示:

 <asp:ScriptManager ID="ScriptManager1" runat="server" EnableCdn="true" /> 

请参阅MSDN以获取更多信息。

为什么我们需要这样做?

在使用asp.net Web应用程序时,必须启用CDN,以便Microsoft可以下载Sys. 图书馆。

您的页面中可能有一个使用Sysfunction的脚本。 设置EnableCdn="true"将确保Sys库在使用前被下载。

什么是CDN?

来自https://www.sitepoint.com/7-reasons-to-use-a-cdn/的报价;

大多数CDN用于托pipe静态资源,如图像,video,audio剪辑,CSS文件和JavaScript。 您可以在各种公共和专用CDN系统上find常用的JavaScript库,HTML5垫片,CSS重置,字体和其他资源。

Google和Microsoft都有CDN。 你所要做的就是添加一个参考。 通常CDN通过脚本资源添加:

 <script src="ajax/4.5.1/1/MicrosoftAjax.js" type="text/javascript"></script> 

一旦设置了EnableCdn="true" ,微软就会在下载Sys库的页面中添加它的小CDN引用(如上所示)。

我希望能帮助遇到同样问题的任何人。

你好thanx很多解决了我的问题,

默认情况下,vs 2008将添加

  <!--<add verb="*" path="*.asmx" validate="false" type="Microsoft.Web.Script.Services.ScriptHandlerFactory, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> <add verb="GET" path="ScriptResource.axd" type="Microsoft.Web.Handlers.ScriptResourceHandler" validate="false" />--> 

需要更正默认configuration(上图)到下面的代码FIX

  <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> <add verb="GET" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler" validate="false"/> 

只需在您的解决scheme中创build空白的.axd文件,根目录问题将得到解决。 (2个文件:scriptresouce.asx,webresource.asxd)