asp.net ASP.NET ViewState 初探
Susan Warren
Microsoft Corporation
2001 年 11 月 27 日
與剛接觸 ASP.NET 頁面的開發人員交談時,他們通常向我提出的第一個問題就是:“那個 ViewState 到底是什嗎?”他們的語氣中流露出的那種感覺,就象我來到一家異國情調的餐館,侍者端上一道我從未見過的菜肴時的那種感覺 - 既疑惑不解,又充滿好奇。但肯定有人認為它不錯,否則就不會提供了。所以,我會先嘗一嘗,或許會喜歡上它,儘管它看上去的確很古怪!
對於 ViewState 也是如此,但是如果適應了它的風格,您會發現在許多情況下,您將樂於在自己的 ASP.NET 應用程式中使用 ViewState,因為它可以協助您使用更少的程式碼完成更多的工作。但是,有時也會對 ViewState 完全棄之不用。下面我們就這兩種情況分別進行闡述,不過,讓我們先回答什麼是 ViewState 這個問題。
答案:ViewState 用於維護頁面的 UI 狀態
Web 是沒有狀態的,ASP.NET 頁面也沒有狀態,它們在到伺服器的每個往返過程中被執行個體化、執行、呈現和處理。作為 Web 開發人員,您可以使用眾所周知的技術(如以工作階段狀態將狀態儲存在伺服器上,或將頁面回傳到自身)來添加狀態。下面我們以圖 1 中的註冊表單為例進行論述。
圖 1:恢複回傳的表單值
從上圖中可以看出,我為便餐選擇了一個無效的值。此表單與 Web 上的多數表單一樣友好,它在出現錯誤的欄位旁邊顯示一條有用的錯誤訊息和一個星號。而且,表單中還顯示了我在其他文字框和下拉式清單中輸入的所有有效值。這在某種程度上是可能的,因為 HTML 表單元素會在 HTTP 標題中將其當前值從瀏覽器發送到伺服器。您可以使用 ASP.NET 跟蹤來查看回傳的表單值,如圖 2 所示。
圖 2:HTTP 表單中回傳的值(通過 ASP.NET 跟蹤顯示)
在 ASP.NET 之前,通過多次回傳將值恢複到表單欄位中完全是頁面開發人員的責任,他們將不得不從 HTTP 表單中逐個拾取回傳值,然後再將其推回欄位中。幸運的是,現在 ASP.NET 可以自動完成這項任務,從而為開發人員免除了一項令人厭煩的工作,同時也無需再為表單編寫大量的代碼。但這並不是 ViewState。