2009-12-03 32 views
1

在閱讀ViewState的一篇文章中,我看到一句話說我不應該認爲TextBox的值存儲在ViewState中是一個錯誤;它存儲在PostBack數據中。在什麼TexBox值回發? ViewState還是回傳數據?

從這裏我明白的是,當我回發一個Web表單時,輸入控件值存儲在HTTP請求主體中。不在Viewstate中。但據我所知,ViewState值無論如何都存儲在一個名爲__VIEWSTATE的隱藏字段中。

那麼這是否意味着__VIEVSTATE值不會作爲回發數據發佈到HTTP POST請求正文中?聽起來對我來說是無稽之談。

換句話說,基本上,如果我說了這樣之情況ViewState的機制是這樣的,我看到它的權利或跳過的東西:

  1. 您輸入的空白​​文本框的值,並提交該頁面

  2. 將文本框的值回送到POST HTTP請求正文中。 __VIEWSTATE內從文本框

  3. 在服務器端,這一點沒有什麼,文本框與頁面

  4. 的ViewState的TrackChange屬性設置爲true的OnInit方法的默認值創建的。

  5. 加載TextBox的回發數據。因爲它與TextBox defalut值不同(因爲用戶輸入了某個內容),所以此文本框的ViewState被標記爲DIRTY。

  6. 文本框的新值被寫入到__VIEWSTATE隱藏字段

  7. 從現在起__VIEWSTATE hiddenfeild包含文本框的最後一個給定值

  8. 頁面發送到具有用戶的瀏覽器__VIEWSTATE隱藏字段。但是這次包含了用戶輸入的最後一個數值,這個數值將準備好被渲染

謝謝你們!

布拉克ozdogan

+0

你真的需要檢查你的標籤發佈之前..現在有無用的標籤,如系統中的方式和工作。我編輯了你的答案。 – 2009-12-03 15:44:09

+0

謝謝surfbum。 – pencilCake 2009-12-03 15:50:14

回答

0

ViewState中是允許服務器跨在同一頁的多個請求維護狀態的頁面上的隱藏輸入。 ViewState由服務器維護,所以它保持不變,除非服務器改變它。 ViewState只是服務器與自己交談的一種方式。

在您的示例中,您想知道爲什麼您第一次在TextBox中放置值時,ViewState中似乎沒有任何值。原因是服務器還沒有放置任何東西。當TextBox的值第一次到達服務器時,服務器會將值放入ViewState中,以便它可以在所有後續請求中跟蹤它。

在隨後的請求中,TextBox值將被編碼到ViewState中並作爲POST數據發送回服務器。