ASP.NET MVC 3 RAZOR Modelsのデータ(配列とか)をViewsで使う

2012/04/01
「/Views/Home/index.cshtml」「/Controllers/HomeController.cs」「/Models/IndexData.cs」の3ファイルが対象。
※ファイル名は適宜変更。

とりあえず「/Views/Home/index.cshtml」内で基本「@ViewBag.ReCatNap」ってな感じで使えるようにする

文字列・配列共通(コントローラー「/Controllers/HomeController.cs」)

「ViewBag.ReCatNap」に「IndexData.GetReCatNapData()」の結果をいれる。
※ここやコンテンツページで直接、データをいれれば良いんだけど…MVCを始めたばかりなのでモデルで値を設定して、コントローラーでコンテンツに渡すようにする。

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6. using MvcApplication.Models;
  7.  
  8. namespace MvcApplication.Controllers
  9. {
  10.   public class HomeController : Controller
  11.   {
  12.     //
  13.     // GET: /Home/
  14.  
  15.     public ActionResult Index()
  16.     {
  17.       ViewBag.ReCatNap = IndexData.GetReCatNapData();
  18.  
  19.       return View();
  20.     }
  21.   }
  22. }

※「6行目:using MvcApplication.Models;」を記載することによって「17行目」の「IndexData.GetReCatNapData()」が利用可能になる。
※「6行目:using MvcApplication.Models;」を記載しない場合「17行目」の「IndexData.GetReCatNapData()」を「MvcApplication.Models.IndexData.GetReCatNapData()」とする。

文字列データのモデルとコンテンツページ

モデル「/Models/IndexData.cs」

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Security;
  6. using System.ComponentModel.DataAnnotations;
  7.  
  8. namespace MvcApplication.Models
  9. {
  10.   public static string GetReCatNapData()
  11.   {
  12.     string data = "recatnap";
  13.     return data;
  14.   }
  15. }

コンテンツページ「/Views/Home/index.cshtml」

  1. @ViewBag.ReCatNap

配列データのモデルとコンテンツページ

モデル「/Models/IndexData.cs」

「List」を使う。

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Security;
  6. using System.ComponentModel.DataAnnotations;
  7.  
  8. namespace MvcApplication.Models
  9. {
  10.   public static List<string> GetReCatNapData()
  11.   {
  12.     //List<string> data = new List<string>();
  13.     //data.Add("re");
  14.     //data.Add("cat");
  15.     //data.Add("nap");
  16.     
  17.     // 上記の記述違い
  18.     List<string> data = new List<string>(){"re", "cat", "nap", };
  19.     
  20.     return data;
  21.   }
  22. }

コンテンツページ「/Views/Home/index.cshtml」

  1. @ViewBag.ReCatNap[0]
  2. @ViewBag.ReCatNap[1]
  3. @ViewBag.ReCatNap[2]

連想配列データのモデルとコンテンツページ

モデル「/Models/IndexData.cs」

「Dictionary」を使う。

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Security;
  6. using System.ComponentModel.DataAnnotations;
  7.  
  8. namespace MvcApplication.Models
  9. {
  10.   public static Dictionary<string, string> GetReCatNapData()
  11.   {
  12.     //Dictionary<string, string> data = new Dictionary<string, string>();
  13.     //data["Id"]="re";
  14.     //data["Name"]="cat";
  15.     //data["Tel"]="nap";
  16.   
  17.     // 上記の記述違い1
  18.     //Dictionary<string, string> data = new Dictionary<string, string>();
  19.     //data.Add("Id", "re");
  20.     //data.Add("Name", "cat");
  21.     //data.Add("Tel", "nap");
  22.   
  23.     // 上記の記述違い2
  24.     Dictionary<string, string> data = new Dictionary<string, string>()
  25.     {
  26.      {"Id", "hama"},
  27.      {"Name", "cat"},
  28.      {"Tel", "nap"},
  29.     };
  30.   
  31.     return data;
  32.   }
  33. }

コンテンツページ「/Views/Home/index.cshtml」

  1. @ViewBag.ReCatNap["Id"]
  2. @ViewBag.ReCatNap["Name"]
  3. @ViewBag.ReCatNap["Tel"]

多次元配列データのモデルとコンテンツページ

モデル「/Models/IndexData.cs」

「List」内で「List」を使う。

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Security;
  6. using System.ComponentModel.DataAnnotations;
  7.  
  8. namespace MvcApplication.Models
  9. {
  10.   public static List<object> GetReCatNapData()
  11.   {
  12.     List<object> data = new List<object>();
  13.     data.Add(new List<string>(){"re", "cat", "nap"});
  14.     data.Add(new List<string>(){"り", "きゃっと", "なっぷ"});
  15.  
  16.     return data;
  17.   }
  18. }

コンテンツページ「/Views/Home/index.cshtml」

  1. @ViewBag.ReCatNap[0][0]
  2. @ViewBag.ReCatNap[0][1]
  3. @ViewBag.ReCatNap[0][2]
  4. @ViewBag.ReCatNap[1][0]
  5. @ViewBag.ReCatNap[1][1]
  6. @ViewBag.ReCatNap[1][2]

多次元の連想配列データのモデルとコンテンツページ

モデル「/Models/IndexData.cs」

「List」内で「Dictionary」を使う。

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Security;
  6. using System.ComponentModel.DataAnnotations;
  7.  
  8. namespace MvcApplication.Models
  9. {
  10.   public static List<object> GetReCatNapData()
  11.   {
  12.     //List<object> data = new List<object>();
  13.     //
  14.     //data.Add(new Dictionary<string, string>()
  15.     //{
  16.     //  {"Id", "re"},
  17.     //  {"Name", "cat"},
  18.     //  {"Tel", "nap"},
  19.     //});
  20.     //data.Add(new Dictionary<string, string>()
  21.     //{
  22.     //  {"Id", "り"},
  23.     //  {"Name", "きゃっと"},
  24.     //  {"Tel", "なっぷ"},
  25.     //});
  26.  
  27.     // 上記の記述違い
  28.     List<object> data = new List<object>()
  29.     {
  30.       new Dictionary<string, string>()
  31.       {
  32.         {"Id", "re"},
  33.         {"Name", "cat"},
  34.         {"Tel", "nap"},
  35.       },
  36.       new Dictionary<string, string>()
  37.       {
  38.         {"Id", "り"},
  39.         {"Name", "きゃっと"},
  40.         {"Tel", "なっぷ"},
  41.       },
  42.     };
  43.  
  44.     return data;
  45.   }
  46. }

コンテンツページ「/Views/Home/index.cshtml」

  1. @ViewBag.ReCatNap[0]["Id"]
  2. @ViewBag.ReCatNap[0]["Name"]
  3. @ViewBag.ReCatNap[0]["Tel"]
  4. @ViewBag.ReCatNap[1]["Id"]
  5. @ViewBag.ReCatNap[1]["Name"]
  6. @ViewBag.ReCatNap[1]["Tel"]

新着(ニュース関連以外)

2017-08-03
formのinputでmaxlengthを使うとFirefoxでバグってた。他のブラウザでも気づかずにバグってたかもしれない。
2017-07-19
折れ線グラフをもう少しゆるやかに・・・というか何というか・・・調べていくと「移動平均」っていう言葉にたどり着いた
2017-07-10
FuelPHPの1.8をダウンロードして使っていたらセッションが使えないということに気付いた。
2017-06-27
MACにWin10をインストールしてみた:再挑戦。
2017-06-25
「簡単」っていうヤツらが多いけど・・・難しいぞ。