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