中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ASP.NET MVC 3中ViewBag, ViewData和 TempData

發布時間:2020-07-23 09:35:54 來源:網絡 閱讀:2080 作者:cnn237111 欄目:編程語言

ViewBag, ViewData十分類似,都可用于把數據從controller傳遞到view。

ViewBag是WebViewPage中的一個屬性,它的類型是dynamic。dynamic類型可以理解為,編譯器在編譯到這種類型時,會跳過類型檢查,而在運行時做這些事情。

ViewData也是WebViewPage類中的一個屬性,但他的類型是ViewDataDictionary。從內部實現上,ViewBag屬性是按照鍵值對那樣存放在ViewData中的,因此也可以通過方為ViewData中值來訪問ViewBag的值,他們指向的引用是同一個的。但是區別在于,ViewData的寫法是按照序列訪問那樣,通過索引訪問,而ViewBag是通過屬性訪問。事實上,在編譯階段,編譯器無法知道ViewBag所給的屬性是否存在,這都是在運行時決定的。舉個例子,ViewData["Index"]可以寫成:ViewBag.Foo,而不需要擔心編譯時錯誤。

我們可以通過下面的例子來驗證ViewBag和ViewData其實指向的對象是同一個。

@{

ViewBag.XXX = new StringBuilder("222");

ViewData["XXX"] = new StringBuilder("333");

}

<pre>

ViewBag的類型是 @ViewBag.GetType();

ViewData的類型是 @ViewData.GetType();

ViewBag.XXX 的值是 @ViewBag.XXX

ViewData["XXX"]的值是 @ViewData["XXX"]

@(ViewBag.XXX == ViewData["XXX"])

@(ViewBag.XXX.Equals(ViewData["XXX"]))

@ViewBag.XXX.GetHashCode()

@ViewData["XXX"].GetHashCode()

</pre>

得到的結果如下:

ASP.NET MVC 3中ViewBag, ViewData和 TempData

可以看到對ViewData["XXX"]做更改,會影響到ViewData.XXX。后續的例子有證明了他們是指向同一個引用的。

在使用ViewBag的時候,有一個好處就是不需要做類型轉換。因為是dynamic類型,只要保證在運行時的類型正確既可以了。舉個例子:

@{

ViewBag.XXX = new List<int>{1,2,3};

ViewData["YYY"] = new List<int> { 3, 4, 5 };

foreach (var i in ViewBag.XXX)

{

@i

}

foreach (var i in ViewData["YYY"] as List<int>)

{

@i

}

}

無論是ViewBag還是ViewData,都僅僅對當前的請求有效,他們的生命周期很短,無法存在于多個請求中。

TempData的出現可以存在多個請求,但是,也被限制于當前請求和下一次請求(通常是Redirect)。它的內部實現是使用了Session。

public void Index(){

TempData["text"] = "123456";

RedirectToAction( "Test1" );

//RenderView("Index");

}

public void Test1(){

string text = TempData["text"] as string;

RenderView("Test1");

}

public void Test2(){

string text = TempData["text"] as string;

RenderView("Test2");

}

如上面的例子,Index中的TempData可以在跳轉到Test1的時候獲得,但不能在Test2中獲得。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

武定县| 石城县| 阳江市| 浦城县| 余庆县| 武定县| 平武县| 会同县| 东乡县| 滨海县| 桃园市| 新化县| 手机| 兴宁市| 石城县| 偏关县| 平舆县| 武山县| 梨树县| 海阳市| 江津市| 祥云县| 共和县| 青铜峡市| 海兴县| 任丘市| 西盟| 马边| 忻城县| 永新县| 辽阳县| 论坛| 宣武区| 桑日县| 滨州市| 安庆市| 乡宁县| 边坝县| 大庆市| 嘉义市| 安吉县|