ExtJS2下拉框在IE下的一个无厘头BUG

这可能是我现在在开发的框架里遇到的最无厘头的一个BUG了

环境:ExtJS2,.Net MVC2.0框架,IE浏览器

描述:使用ComboBox的remote模式读取Ajax数据下拉,MVC2.0里直接使用Controller返回数据,结果在IE下下拉框显示不出来

测试:FF下完全正常,IE下进入测试模式,数据返回正确,前台下拉框也显示的出来,但一退出,我倒,IE又显示不出来了,继续测试,结果很奇怪,IE下10次到有9次显示不出来,还有1次可能是正常的

代码就只写下面后台controller一小段了,代码其实是没问题的

       public string Read() {

    string result = "[";

   。。。。。。全部省略 

    result += "]";
           return result;
        }

遇到这个BUG时,翻出以前能正常显示出来的下拉框,对比半天,然后修改半天,最后发觉居然是正常显示的代码写了行不是很正确的东西,然后问题就解决了

不是很正确的东西是什么呢?是读取参数的方法写的不太正确

MVC2.0里读取POST参数应当使用this.HttpContext.Request["paramname"],而我那时写成了this.Request.Params["paramname"],另外还有种写法,是

this.Request.Form["paramname"]

这三种写法有什么不同呢:

this.HttpContext.Request["paramname"],获取参数,包括POST和GET

this.Request.Form["paramname"],获取POST的Form里的参数

this.Request.Params["paramname"],这个东西获得的就多了,为什么我说不正确,因为我获取用户ID时发现居然获取到的是机器上部署的另一个网站的Cookie......DAMN那个破网站(不是我写的),Cookie都没设置域

但是这东西,他解决问题......

所以后面在所有的提供给ExtJS的ComboBox的下拉框远程数据源的Controller里,都先加一行其实没用的代码:

            string userID = this.Request.Params["userID"];

下拉框就能显示出来了

这个代码其实真没其它用处,Controller里如果要用到登录用户ID也不会使用这个方法获取的ID

想来想去,也不知道这个问题到底是怎么回事,到底是ExtJS的问题呢,还是MVC2.0的问题呢,或者是IE的问题?

使用Java的同事从来没遇到过这个问题,上网搜索也没人提过,但我确实遇到了,而且这个框架给别人使用也是一样的问题,且这个问题只在IE下才出现,但是不是只在ExtJS+MVC2.0+IE下才出现呢(以前使用ashx的代码貌似没遇到过)?而解决的办法是一句对逻辑来说根本没有任何意义的代码...... 真的很无厘头的BUG

posted @ 2012-05-07 10:31  Zux  阅读(404)  评论(0编辑  收藏  举报