壹:使用
ViewData使用:
[csharp]查看普通副本打印?
公共操作結果索引()
{
列表& lt字符串& gtcolors =新列表& lt字符串& gt();
顏色。Add("紅色");
顏色。添加(“綠色”);
顏色。添加(“藍色”);
view data[" list colors "]= colors;
ViewData["dateNow"]=日期時間。現在;
ViewData["name"] = "何靜媛";
view data[" age "]= 25;
return View();
}
視角
[html]查看純文本打印?
& ltp & gt
我的名字是& ltb & gt@ view data[" name "]& lt;/b & gt;,& ltb & gt@ view data[" age "]& lt;/b & gt;歲。
& ltbr/>;
我喜歡以下顏色:
& lt/p & gt;
& ltul id = " colors " & gt
@ foreach(var color in view data[" List colors "]as List & lt;字符串& gt)
{
& lt李& gt& ltfont color = " @ color " & gt@ color & lt/font & gt;& lt/李& gt
}
& lt/ul & gt;
& ltp & gt
@ViewData["dateNow"]
& lt/p & gt;
ViewBag用途:
[csharp]查看普通副本打印?
公共操作結果索引()
{
列表& lt字符串& gtcolors =新列表& lt字符串& gt();
顏色。Add("紅色");
顏色。添加(“綠色”);
顏色。添加(“藍色”);
ViewBag。ListColors = colors//顏色是列表
ViewBag。DateNow=日期時間。現在;
ViewBag。Name= "和景苑";
ViewBag。年齡= 25;
return View();
}
視角
[html]查看純文本打印?
& ltp & gt
我的名字是& ltb & gt@ViewBag。名稱& lt/b & gt;,& ltb & gt@ViewBag。年齡& lt/b & gt;歲。
& ltbr/>;
我喜歡以下顏色:
& lt/p & gt;
& ltul id = " colors " & gt
@foreach(在ViewBag中改變顏色。列表顏色)
{
& lt李& gt& ltfont color = " @ color " & gt@ color & lt/font & gt;& lt/李& gt
}
& lt/ul & gt;
& ltp & gt
@ViewBag。DateNow
& lt/p & gt;
在使用中,我們可以很明顯的看到這兩種方式的區別,只是在獲取價值的方式上有些不同!
第二,定義
視圖包定義
[csharp]查看普通副本打印?
公共動態視圖包{
獲取{
if (_dynamicViewData == null) {
_ dynamicViewData = new DynamicViewDataDictionary(()= & gt;view data);
}
return _ dynamicViewData
}
}
視圖數據定義
[csharp]查看普通副本打印?
公共視圖數據字典視圖數據{
獲取{
if (_viewData == null) {
SetViewData(new view data dictionary());
}
return _ viewData
}
設置{
SetViewData(值);
}
}
從定義上我們可以看到,ViewBag是ViewData的動態包裝器,相當於在ViewData的基礎上進行包裝。
三:對比
ViewData和ViewBag的區別
1,ViewData是字典類型,賦值方法是dictionary。相應的值ViewData["myName"],通過鍵值讀取。
2.ViewBag是壹個動態類型。使用時可以直接給ViewBag.myName添加屬性賦值。
3.ViewBag和ViewData只在當前動作中有效,相當於View。
4.ViewData和ViewBag中的值可以相互訪問,因為ViewBag的實現包含ViewData。
註意:
1,ViewBag只有在要訪問的關鍵字是有效的C#標識符時才起作用。
例如,如果在ViewData[“帶空格的鍵”]中存儲壹個值,則不能使用ViewBag來訪問它。因為根本編不出來。
2.動態值不能作為參數傳遞給擴展方法。因為為了選擇正確的擴展方法,C#編譯器在編譯時必須知道每個參數的真實類型。如果任何壹個參數是動態的,它將不能通過編譯。
比如這行代碼會編譯失敗:@ html.textbox ("name ",viewbag.name)。有兩種方法可以讓這行代碼編譯:第壹種是使用ViewData["Name"],第二種是轉換ViewBag的值。名稱轉換為具體類型:(string)ViewBag.Name。
四:總結
對於大家來說,價值傳遞模式這個話題應該有點老套,因為只要接觸過項目的人都很了解,這是壹個很基礎的知識。這裏列出來的主要目的不是告訴妳如何傳遞價值,如何操作,然後要求妳寫下來,而是通過上面的知識告訴妳,知識並沒有我們想象的那麽深刻。即使我們沒有聽說過所有的知識,只要我們花壹些時間去學習它。