這篇文章主要講解了“ASP.NET中ViewState與ViewData的區別是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“ASP.NET中ViewState與ViewData的區別是什么”吧!
在WebForm的代碼頁面(如.aspx.cs)中定義ViewState:
ViewState["test"] = "abc"; |
在顯示頁面(如.aspx)中就可以用:
< %=ViewState["test"] %> |
進行輸出
在MVC中的Controller中定義:
ViewData["test"] = "abc"; |
同樣也可以在視圖而中用:
< %=ViewData["test"] %> |
進行輸出
ViewState與ViewData,這有區別嗎?
有人可能會說在WebForm模式中如果設置了EnableViewState="false",那么ViewState就不能用了,真的這樣嗎?經測試發現無論EnableViewState為true或false,上面給的<%=viewstate["test"]>都是可以正常輸出值的
那是不是說在WebForm中就可以像MVC中那樣用ViewState來代替ViewData了呢?
MSDN對ViewState的定義:
獲取狀態信息的字典,這些信息使您可以在同一頁的多個請求間保存和還原服務器控件的視圖狀態。
代碼定義是這樣的:
protected virtual StateBag ViewState { get; } |
可以看到此屬性中只有get方法,也就是說此屬性是只讀的,可能你會說上面用的:ViewState["test"] = "abc";不是在為它賦值嗎?這是因為ViewState是StateBag 類的一個實例,而StateBag類是一個實現了字典接口,所以ViewState是可以存儲鍵值對形式的數據的,只是你不能做類似這樣的操作:ViewState = new StateBag...因ViewState 是只讀的,而MVC中的ViewData是可讀寫的,其代碼定義為:public ViewDataDictionary ViewData { get; set; }
所以區別一就是:ViewState是只讀的,ViewData是可讀寫的(可被重新定義)
區別二:ViewData可用于一次http請求中的所有視圖頁,如:.aspx/.ascx...,而ViewState只能用于當前后端代碼文件所在的前端顯示頁。
比如:頁面control.ascx存在于頁面default.aspx中,那么在default.aspx.cs中定義的ViewState["test"]在control.ascx是取不到的。
區別三:ViewState主要用來記錄服務器控件的狀態信息,asp.net引擎會自動填充服務器控件的狀態信處到里面,所以***不要使用ViewState存放自己的值。
區別四:為了保證ViewState可以正確記錄服務器控件的狀態信息,ViewState中的值應該都是可以轉為字串形式的(可序列化),而ViewData是可以用來保存各種類型的值的。
感謝各位的閱讀,以上就是“ASP.NET中ViewState與ViewData的區別是什么”的內容了,經過本文的學習后,相信大家對ASP.NET中ViewState與ViewData的區別是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。