MVC ViewData和ViewBag


      視圖數據可以通過ViewBag屬性訪問,它主要是為了從Controller到view進行傳值用的,類似有所使用的ViewData[] 字典類。對於ViewBag是如此的強大,意味着你能動態的set/get 值,增加任何數量的的額外字段而不需要強類型的檢測。如:

Controller

?
public ActionResult Index()
{
List< string > colors = new List< string >();
colors.Add( "red" );
colors.Add( "green" );
colors.Add( "blue" );
ViewData[ "listColors" ] = colors;
ViewData[ "dateNow" ] = DateTime.Now;
ViewData[ "name" ] = "Hajan" ;
ViewData[ "age" ] = 25;
return View();
}

Controller

?
1
2
3
4
5
6
7
8
9
10
11
12
13
public ActionResult Index()
{
List< string > colors = new List< string >();
colors.Add( "red" );
colors.Add( "green" );
colors.Add( "blue" );
ViewBag.ListColors = colors; //colors is List
ViewBag.DateNow = DateTime.Now;
ViewBag.Name = "Hajan" ;
ViewBag.Age = 25;
return View();
}

 你和上面的對比 你看見了不同嗎?

View
對應前台視圖:

1.使用ViewData

<p>
My name is <b>@ViewData["name"] </b>,
<b>@ViewData["age"] </b>years old.
<br />
I like the following colors:
</p>
<ul id="colors">
@foreach (var color in ViewData["listColors"] as List<string>)
{
<li><font color="@color">@color </font></li>
}
</ul>
<p>
@ViewData["dateNow"]
</p>

2.使用ViewBag

<p>
My name is <b>@ViewBag.Name</b>, <b>@ViewBag.Age</b> years old.
<br />
I like the following colors:
</p>
<ul id="colors">
@foreach (var color in ViewBag.ListColors)
{
<li><font color="@color">@color</font> </li>
}
</ul>
<p>
@ViewBag.DateNow
</p>
效果圖:

ViewBag、ViewData 和 TempData 的區別:
ViewData 和 TempData 都可以傳遞弱類型數據,區別如下:
ViewData 只在當前 Action 中有效,生命周期和 View 相同;
TempData 的數據至多只能經過一次Controller傳遞,並且每個元素至多只能被訪問一次,訪問以后,自動被刪除。
TempData 一般用於臨時的緩存內容或拋出錯誤頁面時傳遞錯誤信息,可以將TempData 在使用之前存儲到相應的 ViewData 中以備循環使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM