Ajax客户端框架无法加载Asp.Net 4.0。

28

我在使用ASP.Net 4.0 Ajax时遇到了一个复杂的问题...我在我的计算机上使用Visual Studio 2010创建了一个网站,并添加了一些更新面板。它们曾经可以正常工作,但突然间在运行我的网站时出现了一系列错误:

Microsoft JScript 运行时错误: ASP.NET Ajax 客户端框架加载失败。

Microsoft JScript 运行时错误: 'Sys' 未定义

奇怪的是,我在同一台机器上使用VS 2010创建了一个网站,那里的更新面板可以完美地工作。我将它的web.config文件复制到我的新网站中,只更改了连接,但我得到了相同的错误。

我尝试搜索解决方案,但未找到任何真正的解决方案。有谁能帮忙吗?


这篇文章非常有帮助,我在多个场合遇到了这个问题,并使用了这里的多个答案来解决它。感谢 Stack Overflow 社区! - johntrepreneur
3
我不确定为什么这个项目被关闭,因为对我来说很有用,而且收到了许多SO社区的积极反馈。在这种情况下,我认为不能仅仅依据社区的投票就做出关闭决定。 - johntrepreneur
1
我已将DefaultAppPool的托管管道模式从“Classic”更改为“Integrated”,并且它对我起作用了。我不能确定是否有任何常见的配置更改适用于您,但这也可能适用于您。 - smlnl
13个回答

35

以下是从asp.net论坛这个帖子中由zhughes提供的答案。

原因:当使用URL路由模块时,由脚本管理器生成的JavaScript路径会发生变化。

解决方案:告诉路由API不要路由具有“axd”扩展名的文件(由脚本管理器生成的文件)。

在Global.asax中注册路由规则的方法中添加此规则即可。

 routes.Ignore("{resource}.axd/{*pathInfo}");

此外,您应该在web.config中添加此部分。

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
</system.webServer>

1
routes.Ignore("{resource}.axd/{*pathInfo}"); 必须出现在 routes.MapPageRoute("RootPages", "{file}", "~/{file}.aspx"); 之前且排在第一位。 - Paul
3
我一周以来一直卡在这个问题上...谢谢。 - Sarawut Positwinyu
这并不是我的解决方案,但请查看https://dev59.com/rFDTa4cB1Zd3GeqPNOYB,也许会有帮助。 - Grandizer
1
“closed as too localized”?!?什么意思? - Jim W says reinstate Monica
太棒了。我经常搜索问题并看到每个人都说“谢谢,它起作用了!”,但对我来说从来没有起作用过。这对我有用!也许值得注意的是,我正在使用VS2013,并在Webforms应用程序中实现了MVC 5。 - oscilatingcretin
显示剩余4条评论

10

如果你使用URL重写模块,那么在每个重写规则中添加以下内容:

<add input="{URL}" pattern="\.axd$" negate="true"/>

在条件标签下,像这样:

<rule name="HomeRewrite" stopProcessing="true">
   <match url="^home$"/>
   <conditions>
     <add input="{URL}" pattern="\.axd$" negate="true"/>
   </conditions>
   <action type="Rewrite" url="/home.aspx"/>
</rule>

8
我发现这可能是一个缓存/压缩问题,通过将以下内容放入 Web.Config 中可以解决此问题。
<system.web.extensions>
    <scripting>
      <scriptResourceHandler enableCaching="false" enableCompression="false" />
    </scripting>
</system.web.extensions>

虽然这对我来说解决了错误 (+1),但似乎禁用缓存并不是最理想的选择。 - johntrepreneur
虽然不是理想的解决方案,但这个答案现在是我的备选方案,但在尝试了kannankeril的解决方案修复“安装程序” - >“MS .NET Framework 4客户端配置文件”后,它永久地消除了我的问题。 - johntrepreneur

3

我曾经遇到同样的问题。我安装了VS 2010 SP1,问题就解决了。


3
我曾经遇到过同样的问题,我通过在Framework 4.0文件夹上运行命令来解决它。这是IIS Handler Mapping的一个问题:这个操作为我解决了问题。 另请参见此帖子。 希望这对您有所帮助。

3
可能是你的web.config文件中缺少一部分,比如<httpHandlers><Handlers>。我的建议是,如果你有旧版本的web config文件,可以尝试使用它来解决问题。

3

微软 JScript 运行时错误:ASP.NET Ajax 客户端框架加载失败。

像这样添加引用...

<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>              
<add assembly="System.Data.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Data.Services, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Data.Services.Client, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

2

当您尝试在页面加载框架javascript函数之前调用它们时,会发生这种常见错误。

因此,在dom准备好后运行您的代码(例如pageload),或者将您的代码放置在scriptmanager标记之后,或者检查将其放置在从scriptmanager加载的javascript之后。


@Aristos,感谢您的回复。我尝试使用Firebug调试页面,并更改了触发错误的行之后所有脚本引用,但当更新面板中的控件提交时,它并没有让整个页面重新提交。这是在没有任何操作的情况下发生的。我创建了一个新的空白网站,并导入了我的页面、app_code和BIN文件夹。它可以正常工作,但后来在没有更改任何内容的情况下,我又遇到了同样的错误。 :( - Khaled
@Aristos 完全不是这样..我在我的机器上重新安装了VS 2010,甚至尝试在另一台安装有VS 2010的机器上打开网站,但仍然遇到了相同的错误。我对这个奇怪的错误感到非常沮丧! - Khaled
@khaled,有一种情况是你的web.config没有正确设置。在谷歌上搜索“Ajax客户端框架加载失败”。 - Aristos
@Aristos 我已经尝试过了,但是在Asp.Net 4.0中,web.config比以前的版本更清洁,我没有改变web.config中的任何内容,并且所有相关的帖子都是通过Google找到的之前的版本。 :( ,感谢您的关注。 - Khaled
@khaled 可能迷失了路由规则中的 WebResource.axd 文件路径。您可以打开呈现 HTML 的页面并查看搜索位置以定位 WebResource 的位置。如果找不到,则 JavaScript 库未加载,会出现 sys 找不到错误。 - Aristos
显示剩余5条评论

2
我曾经遇到过这个问题,向伟大的谷歌寻求答案,尝试了各种建议,包括上面提到的建议,但都没有成功。我放弃了并转而进行其他工作,几天后回来发现问题已经消失了。
我恢复了工作,做了一些代码更改并发布了我的网站,结果问题又出现了。我又回到了谷歌,并找到了一个在使用3.5框架时遇到同样问题的人。在那种情况下,他/她通过进入“添加/删除程序”控制面板并选择修复选项来解决了问题。
我也这样做了,修复了“MS .NET Framework 4 Client Profile”和“MS .NET Framework 4 Extended”。这为我解决了问题。
希望这能解决其他人的问题。

2
在我的情况下,使用IISExpress会让我头疼,转回Cassini开发服务器可以解决问题。

你是怎么做到的?我在使用VS2012,一旦IIS Express占用了我的网站,我就无法再让VS2012使用Cassini来运行这个网站了! - jimtut

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接