升级到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属性, 所以登录时这个脚本报错.
解决办法有两个:
- 把document.Login.txtPassword改成document.getElementById(“txtPassword”)
- 开启ASP.NET4.0中的渲染兼容模式(web.config): controlRenderingCompatibilityVersion="3.5"
第一种是一劳永逸的写法, 改写不标准的js代码. 但是工作量很大, 也需要额外的测试工作.
第二种就比较偷懒了, 让IIS仍然以ASP.NET3.5的渲染模式输出页面. 这样仍然会保留form的name属性
看下来, ASP.NET4.0比较3.5 做了2点改动(对我们工程来说):
- 3.5会给table和img增加一个border=”0”属性. 4.0认为border应该是css控制的, 所以不自动增加这个属性
- 3.5会给form一个id和name. 4.0只会给id, 而删除name属性
更多的改动请参考上面的链接.
建议: HRM里面员工列表, 人事信息等诸多模块中都有这些不规范的js写法. 大家以后写js的时候尽量用jquery或者dom函数, 而不要用form的name获取元素