2012-06-11 83 views
6

存儲ViewState在哪裏?它存儲在服務器還是客戶端?ViewState存儲在哪裏?

我有一個龐大的數據,應該存儲一些過程。我正在使用Session。但是當從一個頁面移動到另一個時,我無法清除會話。所以我想到實現ViewState。但是,當運行大量的數據ViewState拋出錯誤?

我該如何解決這個問題?

+0

您最好查看一下ASP.NET緩存,您可能會發現它適合您的需求。 –

回答

8

Viewstate以自編碼形式存儲在頁面上。您無法直接訪問客戶端的視圖狀態。您需要了解編碼/解碼算法以從客戶端代碼中的此視圖狀態獲取有價值的數據。

您可以使用隱藏變量來存儲將僅用於該頁面的數據。隱藏的變量可以從客戶端和服務器端代碼訪問。

您可以使用緩存或會話來存儲數據表(大數據)。與ViewState相比,它們將具有良好的性能。

緩存是始終使用機器的內存,會話使用什麼樣已被配置:

在Web場會話可以是本地(其中只有親和力設置有效),或遠程(狀態服務器或數據庫或自定義),但緩存始終是本地的。

因此,將DataTable存儲在緩存中會佔用內存,但不會使用序列化。 PS:存儲一個DataSet而不是一個DataTable將幾乎沒有改變。

Refer Cache Implementation

+0

閱讀http://msdn.microsoft.com/en-us/library/bb386448.aspx和http://weblogs.asp.net/sreejukg/archive/2010/04/06/viewstatemode-in- asp-net-4-0.aspx –

+0

「你不能訪問客戶端的視圖狀態。」事實上,你可以訪問它,因爲它沒有被加密(默認)。但是,它不能更改,因爲它包含一個將由ASP.NET驗證的散列。 – Steven

+0

@Steven,我同意你的意見,即我們可以訪問viewstate,但訪問它們並不會有用,因爲我們將如何從viewstate變量中獲取實際/解碼值。 –

7

ViewState中不存儲任何一方,它的來回發送服務器,並在每次請求和響應瀏覽器之間,所以它不是把一個龐大的數據量在ViewState中是個好主意。

1

保存視圖狀態下的大量數據會降低您的網站。 使用查詢字符串從每個頁面上的數據庫獲取新鮮副本,而不是保存上一頁中的全部信息。

0

視圖狀態信息存儲在隱藏的字段中。 信息在此隱藏字段中的服務器和客戶端之間傳輸。

對於asp.net控件,..默認情況下,.net實現了所有控件的視圖狀態,這就是爲什麼當我們點擊該頁面的按鈕時文本框的值不會丟失。