日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
淺談ASP.NET中ViewState與ViewData的區(qū)別

在WebForm的代碼頁面(如.aspx.cs)中定義ViewState:

ViewState["test"] = "abc";

在顯示頁面(如.aspx)中就可以用:

< %=ViewState["test"] %>

進(jìn)行輸出

在MVC中的Controller中定義:

ViewData["test"] = "abc";

同樣也可以在視圖而中用:

< %=ViewData["test"] %>

進(jìn)行輸出

ViewState與ViewData,這有區(qū)別嗎?

有人可能會說在WebForm模式中如果設(shè)置了EnableViewState="false",那么ViewState就不能用了,真的這樣嗎?經(jīng)測試發(fā)現(xiàn)無論EnableViewState為true或false,上面給的<%=ViewState["test"] %>都是可以正常輸出值的

那是不是說在WebForm中就可以像MVC中那樣用ViewState來代替ViewData了呢?

MSDN對ViewState的定義:

獲取狀態(tài)信息的字典,這些信息使您可以在同一頁的多個請求間保存和還原服務(wù)器控件的視圖狀態(tài)。

代碼定義是這樣的:

protected virtual StateBag ViewState { get; }

可以看到此屬性中只有g(shù)et方法,也就是說此屬性是只讀的,可能你會說上面用的:ViewState["test"] = "abc";不是在為它賦值嗎?這是因?yàn)閂iewState是StateBag 類的一個實(shí)例,而StateBag類是一個實(shí)現(xiàn)了字典接口,所以ViewState是可以存儲鍵值對形式的數(shù)據(jù)的,只是你不能做類似這樣的操作:ViewState = new StateBag...因ViewState 是只讀的,而MVC中的ViewData是可讀寫的,其代碼定義為:public ViewDataDictionary ViewData { get; set; }

所以區(qū)別一就是:ViewState是只讀的,ViewData是可讀寫的(可被重新定義)

區(qū)別二:ViewData可用于一次http請求中的所有視圖頁,如:.aspx/.ascx...,而ViewState只能用于當(dāng)前后端代碼文件所在的前端顯示頁。

比如:頁面control.ascx存在于頁面default.aspx中,那么在default.aspx.cs中定義的ViewState["test"]在control.ascx是取不到的。

區(qū)別三:ViewState主要用來記錄服務(wù)器控件的狀態(tài)信息,asp.net引擎會自動填充服務(wù)器控件的狀態(tài)信處到里面,所以***不要使用ViewState存放自己的值。

區(qū)別四:為了保證ViewState可以正確記錄服務(wù)器控件的狀態(tài)信息,ViewState中的值應(yīng)該都是可以轉(zhuǎn)為字串形式的(可序列化),而ViewData是可以用來保存各種類型的值的。

我目前就發(fā)現(xiàn)這幾點(diǎn),希望大家可以繼續(xù)補(bǔ)充,不正確的地方也請指正,謝謝。


新聞標(biāo)題:淺談ASP.NET中ViewState與ViewData的區(qū)別
鏈接URL:http://www.dlmjj.cn/article/dpjsdso.html