系统未定义

时间:2008-09-16 18:16:12

标签: asp.net javascript asp.net-ajax

我正在开发一个ASP.Net/AJAX控制套件项目。 80%的时间没有问题。页面应该运行。如果刷新页面,有时会显示javascript错误“系统未定义”。

它不会一直发生,但它是可重复的。当它发生时,用户必须关闭他们的浏览器并重新打开页面。

这让我相信它可能是一个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>

31 个答案:

答案 0 :(得分:53)

我通过在页面上的HTML中将包含Sys。*调用的<script type="text/javascript"></script>块向下移动(到主体的<asp:Content/>部分关闭之前的最后一项)来修复我的问题。我最初在我的页面的HEAD <asp:Content/>部分中有我的脚本块。我在一个有MasterPageFile的页面内工作。希望这可以帮助别人。

答案 1 :(得分:12)

当我遇到错误时

  • 系统未定义
  • ASP.NET Ajax客户端框架无法加载
在.NET中使用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>

答案 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>

也许它对你也有帮助。这是身份验证问题。

Source

答案 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(); 

请检查enter link description here

答案 19 :(得分:0)

我有同样的问题,但我通过以下方式修复:

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

<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

希望这会有所帮助

答案 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)

发展环境:
  • Dev-Env:VS 2012
  • FX:4.0 / 4.5
  • 实现:Master(ScriptManager + UpdatePanel / Timer)+内容(UpdatePanel)
  • 模式:PageRouting。

声明:

如果所有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)