【ASP.NET MVC】【VB】データを受け渡すには... ~ViewData / ViewBag / TempData ~

データを受け渡すには

 * Model/Session以外で、ControllerとView間でデータの受け渡す手軽な手段として、
   主なものは、以下の3点。

 [1] 「ViewData」を利用してデータの受け渡しを行う
 [2] 「ViewBag」を利用してデータの受け渡しを行う(From MVC3)
 [3] 「TempData」を利用してデータの受け渡しを行う(一時的)

注意点:ViewDataの使いどころについて

https://code.msdn.microsoft.com/3-ViewDataDictionary-7c281068#07
より抜粋

ViewData プロパティを使うとコントローラーからビューに、手軽にデータを渡すことができます。
その反面で ViewData プロパティを使いすぎてしまうと、
コントローラーとビューが密接にかかわり過ぎて、
本来の MVC (Model-View-Controller) の利点が失われてしまいます。

・・・略・・・

ViewData プロパティを使う場面は、
 * 追加の情報をビューに表示させたいとき
 * エラー メッセージを別のビューに表示するとき
などに限っておくとよいでしょう。

[1] ViewData

 * キーとデータを同時に指定することで、データを格納する。
   このViewDataを利用してControllerクラスからViewページへ渡すデータを紐付けることができる。

サンプル

* Controller
<HandleError()> _
Public Class HomeController
    Inherits System.Web.Mvc.Controller

    Function Index() As ActionResult
        ViewData("Message") = "ASP.NET MVC へようこそ" //★ここ★

        Return View()
End Class
* View
 * @ViewData("Message") で表示可能。

参考文献

http://codezine.jp/article/detail/2748?p=4

[2] ViewBag

 * MVC3から利用可能
 * 「ViewBag.【変数】 = "値"」で設定

サンプル

* Controller
<HandleError()> _
Public Class HomeController
    Inherits System.Web.Mvc.Controller

    Function Index() As ActionResult
        ViewBag.Message = "ASP.NET MVC へようこそ" //★ここ★

        Return View()
End Class
* View
 * @ViewBag.Message で表示可能。

使用上の注意

 * VBの「Option Strict on」の場合、ViewBag は使用できない

【詳細】
 * 以下のサイト
http://architect-wat.hatenablog.jp/entry/20130417/1366204348
だと、「Microsoftは従来の ViewData よりも新しい ViewBag の方を使用するように推奨しているよう」
とあるが、「Option Strict on」で、ViewBag を使用するとビルドエラーになる

参考文献

http://blogahf.blogspot.jp/2012/12/aspnet-mvc-wf4.html