最近项目中运用了地区三级联动,用的是最普通的DropDownList回发来实现的,如下图
一直用着都挺好的,可最近客户最近新换了台服务器,我把网站迁移过去就有了问题,三级联动失效了。
首先申明一点,这个三级联动虽然是用服务器控件做的,但代码是没有错的,我一点可以确认,不是网上经常看到的那些服务器控件属性设置不对或方法使用不正确。
 
网站运行环境
新服务器:Windows Server2008 64位系统,IIS7,应用程序.net Framework 版本4.0、托管管道为集成模式、32位兼容模式。
原服务器:Windows Server2008 32位系统,IIS7,应用程序.net Framework 版本4.0、托管管道为集成模式。
本地开发:Windows 7 32位系统,IIS express 8,VS2012
 
测试环境:我自己机器上 IE10,Firefox21,Chome27,同事机器上IE6、7、8、9外加360,遨游、QQ之类的浏览器。
 
测试结果:只有在新服务器和IE10组合时开会出现错误(就是DropDownList控件的OnSelectedIndexChanged事件失效、现象就是下拉框更改选择后页面不回发了)。
附:对新服务器中网站的抓包如下
注意:在IE10中,各种浏览器模式和文档模式都一一试过,结果都是一样。
从源码可以看出,服务器返回给IE10的Html代码中没有onchange事件。
 
看到这里,不知道各位会认为错误出现在什么地方?
我的第一反应是错误出在服务器方,应该不是浏览器的问题,因为我们都知道,浏览器只是执行Html代码,而Html代码都是由服务器端动态返回的,很明显服务器返回给IE10的Html代码中丢失了onchange事件。再对比网站的服务器环境我把重心放到了64位系统上,因为新、旧服务器也就这点不同,结果掉坑里去了,把网站重新设置为64位环境编译了一遍,编译过程还挺曲折的,引用组件System.Data.SQLite.dll没法在64位下运行,费了老大劲,花了大把时间给搞定,结果错误依旧。
 
到这里我又不得不怀疑是浏览器问题了,但是同事都没有用IE10的,到目前为止也就我机器上测试到这个错误。想起老板新买的笔记本是Win8的所以就把链接发给他,让他看看IE11下是不是有问题。结果老板一看我发的消息裁图,北京市都跑四川了,以为数据库出错了,直接叫经理来解决问题。
经理过来一不看代码,二不看服务器,直接认定我浏览器设置有问题,一番设置后,居然“好了”,其实就是把当前网站加入到IE的兼容性列表里(具体做法就是在IE菜单栏工具中将当前网站添加兼容性视图)。
 
我一直以为F12中浏览器模式设置为“IE10兼容性视图”和IE菜单栏工具中的添加兼容性视图是一样的,没想到还有有些区别。
读了后面这段,就会明白其实这个差别只是时间差,在工具栏中添加的兼容性视图在请求时就是以兼容性视图请求的。而F12中的兼容性视图接收到的Html代码是以IE正常模式讲求的,只以兼容性视图解析而已。
 
我们开发时遇到问题一般有两种解决方式,一种像我们经理这样,还有一种就是从根本上解决。我一般不赞成这种表面解决问题的方式,所以我就继续找解决方案,既然问题出现在IE中,我试着用IE10之类的关键字搜索,最后用“asp.net IE10”Google时了一篇英文文章大概是这个意思,接着搜索才找到两篇中文的。原文链接我也找不到了,大概意思就是,asp.net4.0出生得比IE10早,所以asp.net4.0以前版本不认识IE10 的 User-Agent 标头,导致的后果就是ASP.NET 特定功能失效,例如:页面报错__doPostBack找不到,不支援 Cookies 功能等等。这属于.net的Bug,微软也发布了补丁。我没找到文章中的补丁(不知道是后续补丁覆盖了还是不同系统补丁编号不同),但我更新新服务器中的所有补丁后,错误没有了。
 

记录asp.net在IE10下事件丢失排错经过的更多相关文章

  1. asp.net在IE10下事件丢失排错经过

    下午看一篇文章,感觉对以后自己开发有点用途,摘抄下来. 原文出处:http://www.cnblogs.com/weapon/archive/2013/06/23/3150584.html 最近项目中 ...

  2. Asp.net在IE10、IE11下事件丢失经验总结

    asp.net4.0出生得比IE10早,所以asp.net4.0以前版本不认识IE10 的 User-Agent 标头,导致的后果就是ASP.NET 特定功能失效,例如:页面报错__doPostBac ...

  3. 解决ASP.NET在IE10中Session丢失问题【转】

    今天发现在IE10中登录我公司的一个网站时,点击其它菜单,页面总会自动重新退出到登录页,后检查发现,IE10送出的HTTP头,和.AUTH Cookie都没问题,但使用表单验证机制(FormsAuth ...

  4. Asp.net默认配置下,Session莫名丢失的原因及解决

    Asp.net默认配置下,Session莫名丢失的原因及解决 我们平时写的asp.net程序,里面要用到Session来保存一些跨页面的数据.但是Session会经常无故丢失,上网查查,也没找到原因. ...

  5. Asp.net服务器控件在IE10下的不兼容问题

    Asp.net服务器控件在IE10下的不兼容问题 时间:2013-05-16 09:07点击: 89 次 [大 中 小] 相信很多使用IE10的童鞋们已经发现了这个问题,以下是本人在IE10标准模式下 ...

  6. ASP.NET 状态服务 及 session丢失问题解决方案总结

    ASP.NET2.0系统时,在程序中做删除或创建文件操作时,出现session丢失问题.采用了如下方法:1.asp.net Session的实现:asp.net的Session是基于HttpModul ...

  7. [转]ASP.NET 状态服务 及 session丢失问题解决方案总结

    转自[http://blog.csdn.net/high_mount/archive/2007/05/09/1601854.aspx] 最近在开发一ASP.NET2.0系统时,在程序中做删除或创建文件 ...

  8. asp.net学习之GridView事件、GridViewRow对象

    原文:asp.net学习之GridView事件.GridViewRow对象 1. GridView控件的事件 GridView有很多事件,事件可以定制控件的外观或者行为.事件分为三类     1.1 ...

  9. ASP.NET状态服务及session丢失问题解决方案总结

    原文:ASP.NET状态服务及session丢失问题解决方案总结[转载] asp.net Session的实现: asp.net的Session是基于HttpModule技术做的,HttpModule ...

随机推荐

  1. TreeMap源码分析

    MapClassDiagram

  2. hdu 4982 Goffi and Squary Partition

    Goffi and Squary Partition Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Subm ...

  3. Linux之RPM安装软件

    源码包 (可以看到源代码)      脚本安装包(写好的xsheel一键安装.本质还是源码包和二进制包) 二进制包(RPM包.系统默认包)      包管理系统简单,通过命令就可以安装.卸载     ...

  4. 我的ORM之五-- 事务

    我的ORM索引 单库事务与分布式事务 单库事务: 性能更好,应用于一个数据库时的场景,当数据库发生变化,如拆分为多个服务器,代码需要修改. 分布式事务:性能相对较差,但有更大的适用场景.当数据库发生变 ...

  5. MySQL中VARCHAR与CHAR格式数据的区别

    区别 CHAR与VARCHAR类型类似,但它们保存和检索的方式不同.CHAR有固定的长度,而VARCHAR属于可变长的字符类型.它们最大长度和是否尾部空格被保留等方面也不同.在存储和检索过程中不进行大 ...

  6. 算法:POJ1007 DNA sorting

    这题比较简单,重点应该在如何减少循环次数. package practice; import java.io.BufferedInputStream; import java.util.Map; im ...

  7. 【腾讯Bugly干货分享】TRIM:提升磁盘性能,缓解Android卡顿

    Bugly 技术干货系列内容主要涉及移动开发方向,是由 Bugly 邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处.在业内,Android 手机一直有着 ...

  8. ENode 1.0 - 消息的重试机制的设计思路

    项目开源地址:https://github.com/tangxuehua/enode 上一篇文章,简单介绍了enode框架中消息队列的设计思路,本文介绍一下enode框架中关系消息的重试机制的设计思路 ...

  9. Guava-Optional可空类型

    接上篇Guava之Joiner和Splitter,本篇将介绍Guava的另外一个有用的对象Optional,这在Java中Google Guava首先给我们提出可空对象模型的.在其他语言如c#这是已经 ...

  10. 渐析java的浅拷贝和深拷贝

          首先来看看浅拷贝和深拷贝的定义:       浅拷贝:使用一个已知实例对新创建实例的成员变量逐个赋值,这个方式被称为浅拷贝.       深拷贝:当一个类的拷贝构造方法,不仅要复制对象的所 ...