ASP.NET 4.0集成PipeLine会引发javascript错误

时间:2015-04-30 09:29:42

标签: javascript iis-7.5 asp.net-3.5 integrated-pipeline-mode

我使用ASP.NET开发了一个.NET 3.5 framework应用程序,并部署在应用程序池IIS的{​​{1}}中。

enter image description here

代码:

DefaultAppPool

过去两年没有任何问题。

现在,我已将<%@ Page Language="vb" AutoEventWireup="false" Codebehind="Test.aspx.vb" Inherits="Sample.sample"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <title>Test</title> <META http-equiv="Content-Type" content="text/html; charset=windows-1252"> <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR"> <meta content="Visual Basic .NET 7.1" name="CODE_LANGUAGE"> <meta content="JavaScript" name="vs_defaultClientScript"> <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema"> </HEAD> <body onload="document.frmTest.btnAdd.focus();"> <form id="frmTest" method="post" runat="server"> <input tabIndex="9" type="button" value="Add" name="btnAdd"> </form> </body> </HTML> 中的应用程序池从DefaultAppPool更改为ASP.NET v4.0 Integrated Pipeline模式。

enter image description here

应用程序抛出错误

IIS

enter image description here 注意:我已将应用程序池还原为SCRIPT5007: Unable to get property 'btnAdd' of undefined or null reference ,应用程序运行时没有任何错误。

此错误的原因是什么?是否有任何设置需要更改以修复错误?

1 个答案:

答案 0 :(得分:2)

将代码更改为使用

document.forms['frmTest'].btnAdd.focus();

或者为表单元素指定name属性,如下所示:

<form method="post" action="Default" name="frmTest">

当您更改框架版本时,.net可能会向aspx页面添加其他属性,因此代码似乎可以使用默认的应用程序池.net framework 2.0

<强>更新

原因是,在ASP.NET v4.0中,在呈现网页时未生成name标记的form属性。

我们可以通过在应用程序的<system.web>文件中的web.config标记中添加以下设置来解决此问题

<pages controlRenderingCompatibilityVersion="3.5" />