2011-03-19 37 views
0

我想禁用窗體中的viewstate,因爲它太笨重(大約1mb由於從數據庫中檢索一些數據,並在同一表單上的其他位置,我想從我的母版頁訪問控件。 但是當我設置列表視圖的視圖狀態的假我會得到以下錯誤:當我在asp.net中禁用viewstate並且我的viewstate太笨重時,無法訪問我的窗體中的控件我不想啓用它

對象引用未設置到對象的 實例。

我應該在這種情況下怎麼辦? veiwstate太他媽笨重 ,這裏是我所訪問特定的控制寫着:

Control cc = Page.Master.FindControl("mainContent").FindControl("ListView1").FindControl("itemPlaceholderContainer"); 

     foreach (Control ListItemctrl in cc.Controls) 
     { 
      Control lblNewsId = ListItemctrl.FindControl("lblNewsID"); 
      if (lblNewsId != null) 
      { 
       Type t = lblNewsId.GetType(); 
       if (t.FullName == "System.Web.UI.WebControls.Label") 
       { 

        string newsID = ((Label)lblNewsId).Text; 

        foreach (Control childCtrl in ListItemctrl.Controls) 
        { 


         CheckBox ctrlCB = childCtrl.FindControl("chkItem") as CheckBox; 

         if (ctrlCB.Checked) 
         { 

          //based on DDLAction we will do the things ;) 


         } 
         if (childCtrl.FindControl("chkItem") != null) 
          break; 

        }//end foreach childCtrl 
       } 
      }//end outer if 

     }//end foreach listItenctrl 

回答

1

你可以爲整個頁面視圖狀態禁用和選擇性地啓用它爲您的控制,這裏

http://www.4guysfromrolla.com/articles/071410-1.aspx

解釋
+0

謝謝,但我有一個ListView其中我有一個複選框控件,我需要檢查複選框是否選中批處理任務,當我禁用viewstate我會得到上述錯誤...和如果你閱讀上面的代碼,你會明白我應該訪問哪些fr om母版頁。 – 2011-03-19 20:47:31

+0

通過爲您的邏輯創建方法並將其從您的頁面調用,可以將Master頁面負責。順便說一句複選框的值只存儲在客戶端?如果沒有,嘗試查詢數據源而不是 – Robert 2011-03-19 21:00:36

+0

是的價值觀只在客戶端,我想我可以改變我的策略爲Ajax,以避免使用viewstate: - ? – 2011-03-19 21:48:42