Skip to main content
黑话筒

升级到ASP.NET 4.0后JS报错的解决办法

升级到ASP.NET4.0之后, 有同事打开HRM就报JS错误.

图片丢失啦

Debug进去会看到错误停留在

图片丢失啦

但是为什么其他同事都是正常的呢?

查看登录页面的源代码之后, 发现一个特殊的标签: <div class="aspNetHidden">

搜索之后,  看到了这个页面http://msdn.microsoft.com/en-us/library/s57a598e.aspx

原来ASP.NET4.0为了更好的遵循html标准, 删除了form的name属性, 所以登录时这个脚本报错.

解决办法有两个:

  1. 把document.Login.txtPassword改成document.getElementById(“txtPassword”)
  2. 开启ASP.NET4.0中的渲染兼容模式(web.config): controlRenderingCompatibilityVersion="3.5"

图片丢失啦

第一种是一劳永逸的写法, 改写不标准的js代码. 但是工作量很大, 也需要额外的测试工作.

第二种就比较偷懒了, 让IIS仍然以ASP.NET3.5的渲染模式输出页面. 这样仍然会保留form的name属性

看下来, ASP.NET4.0比较3.5 做了2点改动(对我们工程来说):

  1. 3.5会给table和img增加一个border=”0”属性. 4.0认为border应该是css控制的, 所以不自动增加这个属性
  2. 3.5会给form一个id和name. 4.0只会给id, 而删除name属性

更多的改动请参考上面的链接.

建议: HRM里面员工列表, 人事信息等诸多模块中都有这些不规范的js写法. 大家以后写js的时候尽量用jquery或者dom函数, 而不要用form的name获取元素