12031,終結你!

23日早上,我跟隨千千萬上班人的腳步,擠進了北京的地鐵中,向北京站進發,去瀋陽解決那個困擾我多日的12031。這次做好了在瀋陽住上一夜的準備了,一定要把這個問題解決!剛上5號線時,人還挺多的,不過馬上大部分人都下車轉乘10號線去了,一路上倒也不擠,後來還有了個座。到車站時,離開車還有一個小時,坐在那又小睡了一下。9點20分,D5列車載着我準時出發。

 

不坐夜車的感覺挺好,就像早起上班一樣。夜車讓人感覺很辛苦:別人都在被窩裏睡覺,我卻在出差的途中。我靠過道坐,過到對面的女孩正在拿我作寫生,難道我長得那麼有特點?我瞟了一眼,似乎頭髮有點長。她在畫我,我在寫她,呵呵。她還有一些其它的寫生素描,應該是學美術專業的吧,之前還聽她打電話說考文化課的事。想起我以前也很喜歡畫畫的:臨摹漫畫,給別人寫生。現在很難有那份閒情逸致了。

 

下午兩點半,到達了目的地。進去後,發現屋裏在開會,於是在門外等了一會。大概在三點多吧,在等待單總在大連那邊下載QQ的時候,修正了一個視圖。後來單總把QQ裝好了,用遠程協助,我親自操作並看了一下實際的操作效果,沒什麼新鮮的,跟之前描述的一樣。我查看了服務器上的IIS設置、網絡設置,沒什麼特殊的。我開始從蒐集的各種解決方案中挑選一些較爲容易操作的試驗,比如在webconfig中設置maxRequestLength="8192"、直接修改aspx文件添加ValidateRequest="false"、改變ScriptManager的超時屬性等等,均告失敗。我把ScriptManager控件的超時屬性去掉,錯誤就變成了超時錯誤,跟用戶最開始描述的一樣。在IIS中加大站點的超時時間,依然無效。

 

正當我一籌莫展,表情越來越凝重時,遠程操作看了一下其它的頁面,發現並非所有的AJAX功能都有超時問題,而是隻有帶有gridview的頁面有這個問題!好,問題的範圍縮小了,應該是跟gridview有關的!於是用“updatepanel gridview timeout”做關鍵字GOOGLE了一下(往往在中文網頁中找不到解決方案,而是老外那裏討論得很細緻),找到了一篇在ASP.NET論壇(http://forums.asp.net)中的帖子:http://forums.asp.net/t/1091963.aspx,描述的問題跟我遇到的一樣。這篇帖子中,有人作了這樣一段回覆:

 

Set the gridview EnableViewState="false", set all validation controls in the gridview EnableClientScript="false". The "conditional" or "always" setting is not relevant to the problem you are having. The problem is the amount of viewstate generated by the updatepanel combined with the gridview. I had a long post about this last week on this list at http://forums.asp.net/t/1165866.aspx

 

看來,問題很有可能是由於放在updatepanel中的gridview很容易產生太大的視圖狀態。我試着把gridview的EnableViewState屬性設爲false,果然,不會報錯了!不過這樣一來,排序之類的功能就失效了。看來問題果然出在視圖狀態上。是太大?那就壓縮一下吧,記得在網上看到過。搜了一下,發現修改起來較爲複雜,忽然想起,蒐集的解決方案中有一個就是把視圖狀態保存在session中的,即在頁面代碼中重寫這樣一個函數:

 

protected override PageStatePersister PageStatePersister
{
    get { return new SessionPageStatePersister(this); }
}

 

最終,還是這個方案解決了問題,同時也保留了AJAX功能。沒說的,立即把所有涉及gridview的頁面都加上了這段代碼。

 

之前在各個gridview頁面加上了一個鏈接,用於在“全部顯示”和“分頁顯示”兩種狀態之間切換,而且做成整頁刷新,本來是想着作爲解決12031問題的替代方案,但想想像排序等功能還是無法解決的,只要列表要刷新,就會有這個問題的。現在問題解決了,本想把這個功能改成局部刷新的,但是發現修改後,由於許多頁面中這個鏈接沒有放進updatepanel中,導致這個鏈接的文字無法改變了。想着改起來太麻煩,乾脆就都刪掉了。後來,又發現一個BUG,等全部弄完,已經快晚上8點了。最晚的一班動車D26已經於19點33分發車了,只好看看能否趕上21:25的K54了。

 

出了中電投的大門,就馬上開始找出租車。這個地方很偏,出租車很少。不過門口有公共汽車站,尋思着坐一趟車到市裏再打車也行,實在來不及就在車站旁邊的賓館住一夜。結果一看,這的公車都已經在18點、19點發了末班車了!OMG!我一邊往前走,一邊找着出租車。還好,不久就截到了一輛,上車,直奔瀋陽北站。到了瀋陽北站,立馬奔向售票處,居然還買到了一張下鋪。終於可以安安心心地喫晚飯了。在旁邊的快餐店,點了一份紅燒肉和一份酸菜湯,想着慰勞一下自己。不過紅燒肉太難喫,太鹹,沒我自己做的好喫。火車上,半夜的暖氣燒得還是那麼足,熱死人了。第二天早上八點半,終於踏進了家門。自此,在瀋陽上的一天班結束了。

 

回到家後,洗漱了一下,老媽給準備了早餐,九點半,繼續向學校進發,參加教研組的討論會。在食堂午飯後,終於能回家休息了。

 

PS:不過剛纔發現,在刪除那個“全部顯示”和“分頁顯示”的切換鏈接時,相應的updatepanel的trigger有個頁面沒有刪乾淨,留下了BUG。想辦法遠程更新一下吧……

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章