小弟開始系統性的學習asp.net了,剛學到View State感覺書上說的有點模糊,于是小弟查了些資料,終于對這個東東有一個大概了解,
我想也是時候總結下了,同時也跟入門的小伙伴分享下心得,廢話不多說Go
我們都知道當點擊按鈕或者刷新網頁的時候,會導致向服務器執行一個回發動作,然后服務器再重新加載回送頁面信息,我們也知道http協議是無狀態的
無狀態的通俗的理解是:每次服務器加載的都是初始的頁面信息,即你把一個Asp.net的 label控件文本更改了,當你重新刷新頁面的時候,服務器加載回送的頁面信息還是初始的文本即(label1)
常見的解決辦法是可以通過手動編寫代碼,在服務器加載回送頁面后預先填充控件來實現這一功能,幸運的是,ASP.NET將這個功能集成到了功能集中即View State,因此無需我們自己手動編寫代碼,但是必須要了解View State實現機制,因為它的開銷非常大,如何關閉請自己搜索,現在先讓我們了解下View State如何實現的。
當在頁面上拖一個label控件和一個button控件
頁面代碼如下
<body> <form id="form1" runat="server"> <div> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label><br /> <br /> <asp:Button Text="button" value="button" runat="server" OnClick="Button_Click" /> </div> </form></body>
在button的點擊事件處理器里添加CS代碼如下
PRotected void Button_Click(object sender, EventArgs e) { this.Label1.Text = "ChangedText"; }
F5運行然后打開查看瀏覽器的源代碼可以看見我們頁面的源代碼(如下)
<form method="post" action="WebForm1.aspx" id="form1"> <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="qJK68X0jGyjxASf74eN78QeV0E8KvfKVs7YHm84yCePKKNlMrAv04sfWyTh06hsdBxM3fQdv1zQUyG1+WV1BH9SL6Y2gaIu這生成代碼看起很抓狂
Html <from>元素用于讓用戶從瀏覽器向服務器提交信息,用戶可以用一些控件來輸入信息只要是表單的元素它們的值都會被提交。
細心的朋友看見了我們添加的Label控件被生成了span標簽元素,這是因為ASP.NET所有的服務器控件最終都會被ASP.NET運行庫翻譯成html代碼
而span標簽不屬于from表單元素,所以它的值不會被提交給服務器,即你把label文本改成其它信息也不會被提交,那ASP.NET運行庫是如何保存我們的值的呢?
再看下源碼你會發現from表單元素多了hidden元素 (如下)
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="qJK68X0jGyjxASf74eN78QeV0E8KvfKVs7YHm84yCePKKNlMrAv04sfWyTh06hsdBxM3fQdv1zQUyG1+WV1BH9SL6Y2gaIuIP1x0PMfVCqw=" />雖然hidden元素的Value除了一些隨機字符外都看不懂,但是是它實際包含了有用的信息,如果解析下就會發現是我們label文本的值
所以當我們第一次請求頁面時,ASP運行庫會用label的Text的信息填充這個hidden元素,然后加載成功后我們頁面信息就是
label.Text=label1
hidden.value=label1
然后當我們點擊按鈕時會執行一個回發,hidden的值會被回發到服務器,此時的hidden的value還是label
并未改變,因為我們用的是后臺代碼,在執行到后臺代碼時即this.label.text="ChangedText" ASP運行庫會把hidden的Value變成ChangedText
此時該頁面會被再次構建并設置所有默認值,這也意味著label的Text還是label1,然而之后不久在同一個處理周期中運行庫會把提交回的hidden的Value(ChangedText)重新指派給Label的Text,所以當我們刷新或改變label值的時候始終能保持狀態。
需要了解的是并不是所有控件都依賴于ViewState,有很多控件能維持它們自己的狀態,這些控件包括 TextBox、CheckBox、RadioButton、DropDownList等。
新聞熱點
疑難解答