視圖資料可以通過viewbag屬性通路,它主要是為了從controller到view進行傳值用的,類似有所使用的viewdata[] 字典類。對于viewbag是如此的強大,意味着你能動态的set/get 值,增加任何數量的的額外字段而不需要強類型的檢測。如:
controller
?
<code>public</code>
<code>actionresult index()</code>
<code></code><code>{</code>
<code></code><code>list<</code><code>string</code><code>> colors =</code><code>new</code>
<code>list<</code><code>string</code><code>>();</code>
<code></code><code>colors.add(</code><code>"red"</code><code>);</code>
<code></code><code>colors.add(</code><code>"green"</code><code>);</code>
<code></code><code>colors.add(</code><code>"blue"</code><code>);</code>
<code></code>
<code></code><code>viewdata[</code><code>"listcolors"</code><code>] = colors;</code>
<code></code><code>viewdata[</code><code>"datenow"</code><code>] = datetime.now;</code>
<code></code><code>viewdata[</code><code>"name"</code><code>] =</code><code>"hajan"</code><code>;</code>
<code></code><code>viewdata[</code><code>"age"</code><code>] = 25;</code>
<code></code><code>return</code>
<code>view();</code>
<code></code><code>}</code>
1
2
3
4
5
6
7
8
9
10
11
12
13
<code>viewbag.listcolors = colors;</code><code>//colors is list</code>
<code></code><code>viewbag.datenow = datetime.now;</code>
<code></code><code>viewbag.name =</code><code>"hajan"</code><code>;</code>
<code></code><code>viewbag.age = 25;</code>
<code>}</code>
你和上面的對比 你看見了不同嗎?
view
對應前台視圖:
<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>
@viewdata["datenow"]
<b>@viewbag.name</b>,
<b>@viewbag.age</b> years old.
@foreach (var color
in viewbag.listcolors)
color="@color">@color</font>
</li>
@viewbag.datenow
效果圖:

viewbag、viewdata 和 tempdata 的差別:
viewdata 和 tempdata 都可以傳遞弱類型資料,差別如下:
viewdata 隻在目前 action 中有效,生命周期和 view 相同;
tempdata 的資料至多隻能經過一次controller傳遞,并且每個元素至多隻能被通路一次,通路以後,自動被删除。
tempdata 一般用于臨時的緩存内容或抛出錯誤頁面時傳遞錯誤資訊,可以将tempdata 在使用之前存儲到相應的 viewdata 中以備循環使用。