我正在开发一个ASP.Net/AJAX控制套件项目。 80%的时间没有问题。页面应该运行。如果刷新页面,有时会显示javascript错误“系统未定义”。
它不会一直发生,但它是可重复的。当它发生时,用户必须关闭他们的浏览器并重新打开页面。
这让我相信它可能是一个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>
答案 0 :(得分:53)
我通过在页面上的HTML中将包含Sys。*调用的<script type="text/javascript"></script>
块向下移动(到主体的<asp:Content/>
部分关闭之前的最后一项)来修复我的问题。我最初在我的页面的HEAD <asp:Content/>
部分中有我的脚本块。我在一个有MasterPageFile的页面内工作。希望这可以帮助别人。
答案 1 :(得分:12)
当我遇到错误时
<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>
答案 2 :(得分:8)
Dean L'的回答,https://stackoverflow.com/a/1718513/292060为我工作,因为我对Sys的打电话还为时过早。由于我使用的是jQuery,而不是将其移动,我将脚本放在document.ready call:
中$(document).ready(function () {
Sys. calls here
});
这似乎已经足够晚,Sys可用。
答案 3 :(得分:7)
尝试将ScriptManager设置为此。
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" />
答案 4 :(得分:6)
我使用的是telerik并且遇到了完全相同的问题。
将此添加到web.config解决了我的问题:)
<location path="Telerik.Web.UI.WebResource.axd">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
也许它对你也有帮助。这是身份验证问题。
答案 5 :(得分:5)
尝试以下解决方案之一:
<强> 1。浏览器无法加载压缩脚本
如果您在IE6上收到错误,通常就是这种情况,但在其他浏览器上却没有。
脚本资源处理程序 - ScriptResource.axd在将脚本返回到浏览器之前压缩脚本。在RTM之前的版本中,处理程序一直为所有浏览器执行此操作,并且它不可配置。 IE6的某个组件中存在一个问题,即无法正确加载压缩脚本。请参阅知识库文章here。在RTM版本中,我们为此做了两个修复。一,如果IE6是浏览器客户端,我们不压缩。二,我们现在已经进行了压缩配置。以下是切换web.config的方法。
你是如何解决的?首先,确保您使用的是AJAX Extensions 1.0 RTM版本。仅此一点就足够了。您还可以通过编辑web.config来尝试关闭压缩,以获得以下内容:
<system.web.extensions>
<scripting>
<scriptResourceHandler enableCompression="false" enableCaching="true" />
</scripting>
</system.web.extensions>
<强> 2。您的应用程序的web.config不存在ScriptResourceHandler所需的配置
确保您的web.config包含随extensions install提供的默认web.config文件中的条目。 (默认位置:C:\ Program Files \ Microsoft ASP.NET \ ASP.NET 2.0 AJAX Extensions \ v1.0.61025)
第3。您用于Web的虚拟目录未正确标记为应用程序(因此配置未加载) - IIS Web会发生这种情况。
确保您使用的是Web应用程序,而不仅仅是虚拟目录
<强> 4。 ScriptResource.axd请求返回404
这通常表明ASP.NET整体错误配置。在ASP.NET的默认安装中,对以.axd结尾的资源的任何Web请求都通过isapi映射从IIS传递到ASP.NET。此外,映射配置为不检查文件是否存在。如果该映射不存在,或者检查文件是否存在未被禁用,则IIS将尝试查找物理文件ScriptResource.axd,但未找到它,并返回404.
您可以通过从这里将整个url粘贴到ScriptResource.axd并查看它返回的内容来检查是否存在这个问题
<script src="/MyWebApp/ScriptResource.axd?[snip - long query string]" type="text/javascript"></script>
你如何解决这个问题?如果没有正确安装ASP.NET,您可以运行&#34; aspnet_regiis.exe&#34;命令行工具来修复它。它位于C:\ WINDOWS \ Microsoft.Net \ Framework \ v2.0.50727中。您可以运行&#34; aspnet_regiis -i -enable&#34;,它使用IIS完全注册ASP.NET,并确保在IIS6中启用了ISAPI。您还可以运行&#34; aspnet_regiis -s w3svc / 1 / root / MyWebApp&#34;只修复您的Web应用程序的注册。
<强> 5。解决&#34;系统未定义&#34; IIS 7下的ASP.NET AJAX RTM中的错误
将此条目放在<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
答案 6 :(得分:5)
您必须在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>
希望这有帮助。
答案 7 :(得分:4)
除了确保页面上有ScriptManager之外,您还需要确保正确配置了web.config。
当ASP.NET AJAX 1.0发布时(对于.NET 2.0),有很多自定义web.config设置,它们添加了处理程序,控件等。
您可以在此处找到配置信息:http://www.asp.net/AJAX/documentation/live/ConfiguringASPNETAJAX.aspx
答案 8 :(得分:3)
确保您拥有与.NET AJAX交互的任何客户端脚本最后都包含以下行:
if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();
这告诉脚本管理器整个脚本文件已加载,并且它可以开始调用客户端方法
答案 9 :(得分:2)
我讨厌添加这么大的主题以及以后,但我认为我的解决方案至少可以在VS2015中使用。
我正在寻找查找系统错误的原因,唯一对我有用的解决方案是在EnableCdn="true"
中添加ScriptManager
,如下所示:
<asp:ScriptManager ID="ScriptManager1" runat="server" EnableCdn="true" />
有关详细信息,请参阅MSDN。
为什么我们需要这样做?
在处理asp.net Web应用程序时,您必须启用CDN,以便Microsoft可以下载Sys.
库。
您网页中可能有一个使用Sys
功能的脚本。设置EnableCdn="true"
可确保在使用Sys
库之前下载它。
什么是CDN?
来自https://www.sitepoint.com/7-reasons-to-use-a-cdn/
的引用大多数CDN用于托管静态资源,如图像,视频, 音频剪辑,CSS文件和JavaScript。你会发现常见的JavaScript 库,HTML5填充程序,CSS重置,字体和其他可用资产 在各种公共和私人CDN系统上。
谷歌和微软都有CDN。您所要做的就是添加一个参考。通常,CDN是通过脚本资源添加的:
<script src="https://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjax.js" type="text/javascript"></script>
设置EnableCdn="true"
后,Microsoft会在下载Sys
库的页面中添加它的小CDN引用(如上所述)。
我希望能帮助遇到同样问题的人。
答案 10 :(得分:2)
我遇到了同样的问题,经过多次争吵后,我决定尝试隔离问题,只是将脚本管理器加载到一个空页面中,这仍然会导致同样的错误。通过将我的网站的web.config与一个全新的(工作)测试网站进行比较,发现我在web.config的system.web部分中将<compilation debug="true">
更改为<compilation debug="false">
,从而解决了我发现的问题。问题。
我还必须从system.web中删除<xhtmlConformance mode="Legacy"/>
条目,以使更新面板正常工作。 Click here有关此问题的说明。
答案 11 :(得分:1)
在我的情况下,问题是我已经推出以下代码以在部分回发后保留gridview表头:
protected override void OnPreRenderComplete(EventArgs e)
{
if (grv.Rows.Count > 0)
{
grv.HeaderRow.TableSection = TableRowSection.TableHeader;
}
}
删除此代码可以解决问题。
答案 12 :(得分:1)
我通过创建单独的asp.net ajax解决方案并将web.config中的所有ajax配置复制并粘贴到工作项目来解决了这个问题。
这是您应该在web.config中设置的必备配置
<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>
答案 13 :(得分:1)
将AjaxControlToolkit.dll从4.1.60623.0更新到最新版本4.1.7.725后,我遇到了同样的问题。
我已经搜索到了这个页面,但没有一个答案对我有帮助。
在查看CodePlex zip文件中的Ajax Control Toolkit示例网站之后,我意识到<asp:ScriptManager>
已被新<ajaxtoolkit:ToolkitScriptManager>
取代。我这样做了,并且没有 Sys.Extended未定义。
答案 14 :(得分:1)
如果以上情况均不适合您,并且您碰巧重写OnPreRenderComplete,请确保调用base.OnPreRenderComplete。我的治疗师会很高兴看到我回来
答案 15 :(得分:0)
即使为web配置添加正确的条目仍然会出现此错误?此错误的最常见原因是过早引用Sys名称空间的JavaScript。 然后,最明显的修复方法是将脚本块移动到ScriptManager控件下面:
答案 16 :(得分:0)
我知道这是一个旧线程,但是我找到了一个独特的解决方案。就我而言,出现错误是因为我在同一个ASP.NET Web应用程序中同时使用了Webforms和MVC。映射路线后,问题出现了。我通过添加以下代码来忽略“ {resource} .aspx / {* pathInfo}”和“ {resource} .axd / {* pathInfo}”的路由来解决此问题
private void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Test", action = "Index", id = UrlParameter.Optional }
);
}
答案 17 :(得分:0)
在我的情况下,我发现了一个非常隐藏的原因......在 Global.ascx.cs 中有这个页面路由,它在我的测试中没有出现子文件夹,但始终返回问题错误..另一天有奇怪的问题。
routes.MapPageRoute("siteDefault", "{culture}/", "~/default.aspx", false, new RouteValueDictionary(new { culture = "(\\w{2})|(\\w{2}-\\w{2})" }));
答案 18 :(得分:0)
添加
if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();
答案 19 :(得分:0)
我有同样的问题,但我通过以下方式修复:
将脚本文件放入页面时,请确保它是
<script></script> and not <script />.
希望这会有所帮助
答案 20 :(得分:0)
我不认为这一点已被添加,因为我只花了一些时间来寻找它,我希望它可以提供帮助。
我正在使用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>
答案 21 :(得分:0)
如果所有web.config
解决方案都不适合您并且您已实施PageRouting(IIS 7+),那么下面的代码段将解决您的问题。
这并不意味着Highjack这个问题,但与其他人有同样的问题,并在这里实施了100%的建议,对.Net 4.0 / 4.5进行了少量修改,但没有一个适合我。
在我的情况下,我实施了Page Routing,这让我的问题更加重要。基本上它可以用于大约20次左右的调试运行,然后BAM会因Sys is undefined
错误而出错。
在回顾了其他一些帖子后,我们开始讨论Clean-URL逻辑,我记得我已经完成了PageRouting设置。
以下是我用于构建模式的资源:Page Routing
我的单行代码修复了我的VS2012调试问题:
rts.Ignore("{resource}.axd/{*pathInfo}") 'Ignores any Resource cache references, used heavily in AJAX interactions.
答案 22 :(得分:0)
这听起来很愚蠢,但我在VS2010中开发并托管在VS Dev Server中的网站遇到了类似的问题。有问题的页面有一个scriptmanager来创建与wcf服务的连接。我为服务添加了一个额外的方法,这个错误开始出现了。
为我修复的是在oroject Web设置中使用不同的端口号从“自动分配端口”更改为“特定端口”。
我希望我知道为什么......
答案 23 :(得分:0)
我遇到了类似的问题,令我惊讶的是,我发现我的一位开发人员已将web.config保存在与 web123.config 相同的文件夹/解决方案中,并错误地将这两个文件上传
我删除 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>
答案 24 :(得分:0)
有一个类似的问题,除了我的页面始终生成Sys是未定义的错误。
对我来说,问题源于我刚刚安装了.NET 2.0的AJAX 1.0扩展,但已经在Visual Studio中创建了我的Web项目。
当试图创建AJAX控件时,我一直遇到这个错误,我在这里发现了Slace和MadMax1138s的帖子。并且认为这是我的web.config,我使用新的“支持AJAX的网站”项目类型创建了一个新项目,并且确实web.config具有使用AJAX控件所需的大量自定义。
我刚刚使用web.config更新了web.config,我已经自己完成并将其放入我现有的项目中,一切正常。
答案 25 :(得分:0)
确保您没有任何可以更改网址的重写规则。
在我的情况下,应用程序认为它的级别仅比网址更深。
示例:http://mysite.com/app/page.aspx是真正的网址。 但我切断了/ app /这对ASP.net和WCF来说很好,但显然不适合Ajax。
答案 26 :(得分:0)
使用Ajax Control Toolkit ToolkitScriptManager和URL Write 2.0的组合时发现错误。
在我<rewrite> <outboundRules>
我有一个先决条件:
<preConditions>
<preCondition name="IsHTML">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html"/>
</preCondition>
</preConditions>
但显然我的一些出站规则未设置为使用前置条件。
一旦我对所有出站规则设置了前置条件:
<rule preCondition="IsHTML" name="MyOutboundRule">
没有更多问题。
答案 27 :(得分:0)
请请检查服务器是否设置了正确的时间和日期......
在浪费了大约6个小时之后,我在某处读到了它......
必须更新服务器的日期和时间才能正常工作......
否则你会得到'Sys'是未定义的错误。
答案 28 :(得分:0)
我今天看到完全相同的错误,但它不是配置或直接JavaScript问题。
外部.net项目已更新,但在网站编译中没有正确选择更改。我的假设是ASP.NET ajax无法正确构造.NET对象的客户端表示,因此无法正确加载。
要解决此问题,我重建了外部项目,并重建了遇到问题的解决方案。问题消失了。
答案 29 :(得分:-1)
嗨,很多,它解决了我的问题,
默认情况下,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" />-->
需要将默认配置(上方)更正为以下代码 的 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"/>
答案 30 :(得分:-2)
只需在解决方案根目录中创建空白的.axd文件即可解决问题。 (2档案:scriptresouce.asx,webresource.asxd)