ASP.NET MVCとknockout.jsの連携:データをJSONで渡す
2012/04/15
ソース
コントローラー:Controllers/HomeController.cs
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.Mvc;
-
- namespace TestProject.Controllers
- {
- public class HomeController : Controller
- {
-
- public ActionResult Index()
- {
- return View();
- }
-
- public ActionResult IndexJsonData()
- {
-
- List<Dictionary<string, string>> list = new List<Dictionary<string, string>>()
- {
- new Dictionary<string, string>() { {"id", "1"}, {"item", "ねぎ間"}, {"price", "168"} },
- new Dictionary<string, string>() { {"id", "2"}, {"item", "ハツ"}, {"price", "136"} },
- new Dictionary<string, string>() { {"id", "3"}, {"item", "レバー"}, {"price", "136"} },
- new Dictionary<string, string>() { {"id", "4"}, {"item", "ぼんちり"}, {"price", "136"} },
- new Dictionary<string, string>() { {"id", "5"}, {"item", "はらみ"}, {"price", "136"} },
- new Dictionary<string, string>() { {"id", "6"}, {"item", "うずら玉子"}, {"price", "136"} },
- new Dictionary<string, string>() { {"id", "7"}, {"item", "なんこつ"}, {"price", "136"} },
- new Dictionary<string, string>() { {"id", "8"}, {"item", "手羽先"}, {"price", "168"} },
- new Dictionary<string, string>() { {"id", "9"}, {"item", "せせり"}, {"price", "136"} },
- new Dictionary<string, string>() { {"id", "10"}, {"item", "白レバー"}, {"price", "168"} },
- new Dictionary<string, string>() { {"id", "11"}, {"item", "丸ごとシマウマ"}, {"price", "290"} },
- };
-
- return Json(list, JsonRequestBehavior.AllowGet);
- }
- }
- }
ビュー:Views/Home/Index.cshtml
- @{
- ViewBag.Title = "とりあえず直書きしたデータをJSONにして受け取り出力:焼き鳥メニュー";
- }
-
- <script type="text/javascript">
- $(document).ready(function () {
- $.getJSON("@Url.Action("IndexJsonData")", function (data) {
- var viewModel = {
- items: ko.observableArray(data)
- };
-
- ko.applyBindings(viewModel);
- });
- });
- </script>
-
- <h2>@ViewBag.Title</h2>
-
- <table>
- <thead>
- <tr>
- <th>id</th>
- <th>item</th>
- <th>price</th>
- </thead>
- <tbody data−bind="foreach: items">
- <tr>
- <td data−bind="text: id"></td>
- <td data−bind="text: item"></td>
- <td data−bind="text: price+' 円'"></td>
- </tr>
- </tbody>
- </table>
めも
コントローラー側
- JSON用?に関数?メソッド?作成(IndexJsonData())
- 本来なら使うデータはmodelsに記載するけど、テスト用としてココに記載(listという名前にしておく)
- データ(list)をJSONにして返すために「Json(list, JsonRequestBehavior.AllowGet)」を記載
ビュー側
- ビューのscriptタグ内で「$.getJSON()」を使う。
- コントローラーの「IndexJsonData()」を読込むために「$.getJSON()」で「@Url.Action("IndexJsonData")」を記載
- 「ko.applyBindings」で「viewModel」を実行
- 「items」に取得したJSONをいれる
- HTMLタグ側で「items」を「foreach」する
- priceには「円」という文字を追加しておく。
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.Mvc;
- namespace TestProject.Controllers
- {
- public class HomeController : Controller
- {
- public ActionResult Index()
- {
- return View();
- }
- public ActionResult IndexJsonData()
- {
- List<Dictionary<string, string>> list = new List<Dictionary<string, string>>()
- {
- new Dictionary<string, string>() { {"id", "1"}, {"item", "ねぎ間"}, {"price", "168"} },
- new Dictionary<string, string>() { {"id", "2"}, {"item", "ハツ"}, {"price", "136"} },
- new Dictionary<string, string>() { {"id", "3"}, {"item", "レバー"}, {"price", "136"} },
- new Dictionary<string, string>() { {"id", "4"}, {"item", "ぼんちり"}, {"price", "136"} },
- new Dictionary<string, string>() { {"id", "5"}, {"item", "はらみ"}, {"price", "136"} },
- new Dictionary<string, string>() { {"id", "6"}, {"item", "うずら玉子"}, {"price", "136"} },
- new Dictionary<string, string>() { {"id", "7"}, {"item", "なんこつ"}, {"price", "136"} },
- new Dictionary<string, string>() { {"id", "8"}, {"item", "手羽先"}, {"price", "168"} },
- new Dictionary<string, string>() { {"id", "9"}, {"item", "せせり"}, {"price", "136"} },
- new Dictionary<string, string>() { {"id", "10"}, {"item", "白レバー"}, {"price", "168"} },
- new Dictionary<string, string>() { {"id", "11"}, {"item", "丸ごとシマウマ"}, {"price", "290"} },
- };
- return Json(list, JsonRequestBehavior.AllowGet);
- }
- }
- }
- @{
- ViewBag.Title = "とりあえず直書きしたデータをJSONにして受け取り出力:焼き鳥メニュー";
- }
- <script type="text/javascript">
- $(document).ready(function () {
- $.getJSON("@Url.Action("IndexJsonData")", function (data) {
- var viewModel = {
- items: ko.observableArray(data)
- };
- ko.applyBindings(viewModel);
- });
- });
- </script>
- <h2>@ViewBag.Title</h2>
- <table>
- <thead>
- <tr>
- <th>id</th>
- <th>item</th>
- <th>price</th>
- </thead>
- <tbody data−bind="foreach: items">
- <tr>
- <td data−bind="text: id"></td>
- <td data−bind="text: item"></td>
- <td data−bind="text: price+' 円'"></td>
- </tr>
- </tbody>
- </table>
めも
コントローラー側
- JSON用?に関数?メソッド?作成(IndexJsonData())
- 本来なら使うデータはmodelsに記載するけど、テスト用としてココに記載(listという名前にしておく)
- データ(list)をJSONにして返すために「Json(list, JsonRequestBehavior.AllowGet)」を記載
ビュー側
- ビューのscriptタグ内で「$.getJSON()」を使う。
- コントローラーの「IndexJsonData()」を読込むために「$.getJSON()」で「@Url.Action("IndexJsonData")」を記載
- 「ko.applyBindings」で「viewModel」を実行
- 「items」に取得したJSONをいれる
- HTMLタグ側で「items」を「foreach」する
- priceには「円」という文字を追加しておく。
knockout.jsのチュートリアルをやっていたから、この記述は理解しづらい。チュートリアルでの記述に合わせたのは「ASP.NET MVCとknockout.jsの連携:データをJSONで渡す2」に記載。