系统是未定义的
我有一个ASP.Net / AJAX控制工具包项目,我正在努力。 80%的时间没有问题。 该页面应该运行。 如果刷新页面,它有时会显示一个JavaScript错误“Sys is undefined”。
它不会一直发生,但它是可重复的。 发生这种情况时,用户必须closures浏览器并重新打开页面。
这使我相信它可能是一个IIS设置。
另一个说明。 当我得到错误时,我查看了页面源代码。 当页面抛出错误时,下面的代码丢失了:
<script src="/ScriptResource.axd?d=EAvfjPfYejDh0Z2Zq5zTR_TXqL0DgVcj_h1wz8cst6uXazNiprV1LnAGq3uL8N2vRbpXu46VsAMFGSgpfovx9_cO8tpy2so6Qm_0HXVGg_Y1&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.
图书馆。
您的页面中可能有一个使用Sys
function的脚本。 设置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)