2010-09-17 146 views
5

是否還有其他ViewState替代方案?我聽過很多類似Session的內容,在用戶離開頁面的那一刻,保持頁面某些控件的狀態並被破壞。ASP.NET Webforms中的ViewState替代方案

我知道我所描述的ViewState的本身,而是我在尋找各種或建議,所以我能避免完全的ViewState的格局。

的我如何使用它是在那裏我存儲我的網格(的ViewModels列表)到ViewState中的內容的一個例子。這有助於瞭解哪些條目是髒的,哪些條目已被修改,其索引,當前選定的對象等。

回答

3

我的一位同事開發了一種將視圖狀態數據存儲在文件中的方法。因此,在客戶端和服務器之間不傳輸沉重的視圖狀態數據。只是一個代表視圖狀態數據文件的鍵(這是視圖狀態數據文件)被保存爲會話變量。在我們的測試中,我們發現在文件中保存視圖狀態可以通過減少視圖狀態的數量來減少服務器的響應時間(當時非常巨大)。

在這種article「的服務器上保持視圖狀態」下,你可以找到如何該方法可以實現。您甚至可以將視圖狀態數據存儲在數據庫表中,如果您的應用程序位於Web場上,則可以提供額外的靈活性。

+0

雖然這看起來不是一種替代方案,但您可以在不更改整個體系結構的情況下提高應用程序的性能。 – Zafer 2010-09-17 08:07:33

+0

我一定會看看這個。 – Jonn 2010-09-17 10:37:45

0

您有Session,並且您有Cache

會話是每個用戶,緩存是全局的。

你真的需要將所有這些存儲在ViewState中嗎?爲什麼你可以提交(但是你的問題非常模糊,所以我在這裏做一些假設)從數據庫中獲取所有舊數據,將它與新數據進行比較,並更新更改內容?

+0

讓我感覺更舒服的是,狀態駐留在我的視圖ViewModels中。 (我只保留那些我覺得控制功能非常必要的東西。)其他所有東西都會在回發時重新創建。不會從數據庫中獲取,重新創建ViewModels,然後進行比較,總體上會變慢? – Jonn 2010-09-17 10:36:28

1

另一種選擇是壓縮ViewState。它仍然增加了來回的體積,但通常是最小的。

如果您使用.NET 4中,也有一些有用的新的ViewState補充:

ASP.NET 4.0: more control on viewstate management

+0

Tsk。我們仍在使用.Net 3.5開發大部分應用程序。 – Jonn 2010-09-17 10:39:12

1

我不認爲你是一個案件從ViewState中移開。

如果你持有了大量的數據,你會堅持它,當其他地方面臨的問題。會議?它會打擊你的內存消耗,或者如果它沒有進程,你會在每次會話被加載/寫入時(每個請求一次)移動所有內容。您當然可以嘗試通過儘快釋放存儲的數據來限制問題,比如在asp.net MVC中使用TempData。

可以減少需要存儲通過引入時間戳/或記錄版本檢查修改的記錄信息的量。這樣您就可以檢查是否添加了新版本,並向用戶顯示他們嘗試保存的內容以及其他人保存的內容。