SharePoint物件模型與ViewState
來源:互聯網
上載者:User
ViewState對於大家來說,應該是一點都不陌生的。雖然在ASP.NET中到處可見它的蹤跡,但是,我卻很少使用它。
近日,在開發WebPart時,為了避免每一次重新整理頁面都要重新擷取同一個SPList,因此,我使用了ViewState儲存
SPList對象,但是很不幸的是,編譯時間完全正常,但是到使用時,卻很不給面子的一直彈“發生意外錯誤”。對於這個問題的解決,我經曆了如下幾步,希望對大家有所協助:
Step1: 我跟蹤調試WebPart,直到該WebPart的PreRender事件函數執行完畢,就會導致頁面意外錯誤,而且無法再跟蹤到
Render中(因為My Code中沒有重寫SaveViewState函數)。
聯想到PreRender事件之後,應該執行的是儲存ViewState(即SaveState),而我的WebPart中只有SPList這裡用了
ViewState,那問題多半出在這裡了,但是,具體是什麼錯呢?沒轍,因為我跟不進去。
Step2: 預設情況下,SharePoint出錯顯示的都是友好資訊,而且友好到您基本上無法明白到底出什麼錯。
很鬱悶的是,一般情況下,我建一個網站,都會更改web.config ,讓它顯示詳細的錯誤資訊,但是,部署webpart
的這個網站,我偏偏沒有更改!
Step3: 更改web.config,讓SharePoint能顯示更詳細的錯誤資訊:
1、 將<SafeMode ... CallStack="false" ...... AllowPageLevelTrace="false">中的CallStack和AllowPageLevelTrace的屬性設定為“true”。
2、<customErrors mode="On" />的mode改為"Off"
Step4: 再次運行,就得到詳細的錯誤資訊:SPList沒有被標記為可序列化!
------------------------
至此,才明白出錯以及為什麼跟不進Render方法的原因,原來是要儲存SPList時,無法將對象序列化。
註:ViewState儲存的對象需要是可序列化的。
------------------------
這麼一個錯誤,道道還是不少,希望對大家有用~~