天天看點

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

轉載于:https://www.cnblogs.com/zuxOK/archive/2012/05/07/2487020.html