1. 程式人生 > >PostBack遭遇超過了最大請求長度

PostBack遭遇超過了最大請求長度

有個小Web應用用於計算不同資料來源的資料生成報表,生成的頁面資料量比較大,每次載入完都得好幾十秒,但因為一般情況下只要獲取到想要的資料,再匯出為Excel就行了,對使用者體驗倒也無啥大礙。

後來,因為有個小改動,需要在頁面中設定兩個不同的條件,分別生成相應的報表,這時問題就來了,第一次生成的時候倒也正常,第二次生成的時候就會出現“超過了最大請求長度”的錯誤。開始我還以為是程式中sql語句的問題,是不是拼湊的SQL語句太長之類的,反覆檢查了半天的程式,也沒發現啥問題。後來忽然間想到,超過了最大請求長度不是配置檔案的問題嗎?httpRuntime中不是有個maxRequestLenth設定,用來指定請求的長度,預設應該是4096KB。但這種情況一般會在上傳檔案時才會出現,比如我們在頁面中部署一個檔案上傳控制元件,當選擇的檔案過大,就會現現該錯誤,這時我們會根據需要將其適當的調高一些就沒事了。

但我這裡並沒有上傳檔案,為啥也會出現了這個錯誤呢?我先嚐試將該值調整為20480,即20M,再進行測試果然沒事了。那原因在哪兒呢?這時我注意到,程式在第一次生成頁面的時候正常,第二次重新設定條件後提交就會出錯,那麼問題就出在第二次提交時,預設情況下asp.net程式會PostBack所有頁面資料到伺服器,那麼因為這時頁面資料量較大,超過了預設的4M,於是產生錯誤。

如果調高這個限制可以解決該問題,但因為在當前這個情況,生成的報表是沒必要PostBack的,我這裡是用GridView控制元件裝載這些資料的,更簡單的處理方法應該是設定GridView控制元件的ViewStateMode屬性為Disabled,也就是在PostBack時不用儲存其檢視狀態,這樣,一方面避免了錯誤的出現,另一方面也能減少不必要的資料傳遞,提高程式的執行效率。