2013-01-10 49 views
0

爲了解決動態用戶控制的ViewState丟失浪費時間,我決定將ViewState關閉。動態控制,禁用ViewState和回傳

問題是我現在該做什麼?我應該如何保持動態控件的狀態,以便在回發後不會丟失。我正在考慮使用Session,但這意味着我必須爲用戶打開的每個頁面/標籤生成唯一的鍵,以便值不會被覆蓋(正確?)。做這件事的最好方法是什麼?

+0

我最終禁用了ViewState並使用HiddenFields代替。 – Kta

回答

0

爲了保證動態的用戶控件的視圖狀態,你需要確保

  • 動態控制是在每一個崗位,回到場景
  • 它們在頁面生命週期創建儘早創造 - init和負載狀態是最好的賭注(在控制事件加載它們不太可能工作)
  • 動態控制層次應該是完全一樣的,並在層次中的所有控件應該有ID相同先前請求
  • 始終分配ID(否則可能自動生成並且可以有不同的值),並且在控制樹中添加控件之前應該進行分配。

更改視圖狀態存儲以說會話而不是隱藏字段不會解決ASP.NET運行時已加載視圖狀態或無法將控件與其視圖狀態數據關聯的問題(從ID和層次推斷)

+0

我可以驗證控件在每次回發後都獲得相同的UniqueID。加載兩個相同類型的動態控件是否有可能導致問題?儘管它們具有不同的uniqueID,但它們具有相同的服務器端ID。 – Kta

+0

@Kta,只要命名容器不同(即diff唯一標識符),它不應該是一個問題。確保在將控件添加到父項之前分配ID。你可以重載'LoadControlState' /'SaveControlState'來檢查視圖狀態包! – VinayC