はじめに
.NETオブジェクト から JavaScriptオブジェクト(JSON)に変換方法を2つ記載する。 【1】コントローラ側で、.NETオブジェクトからJSONに変換 【2】ビュー側で、.NETオブジェクトからJSONに変換
【1】コントローラ側で、.NETオブジェクトからJSONに変換
* 「JavaScriptSerializer」を使用する * 以下の関連記事でも使用している。http://blogs.yahoo.co.jp/dk521123/35646695.html
モデル
* JsonDemoModel.vbNamespace Models Public Class JsonDemoModel Public Property JsonData As String End Class End Namespace
コントローラ
* JsonDemoController.vbImports System.Web.Mvc Imports System.Web.Script.Serialization Imports WebAppli.Models Namespace Controllers Public Class JsonDemoController Inherits Controller Function Index() As ActionResult Dim model = New JsonDemoModel() Dim codes = New List(Of String) codes.Add("0") codes.Add("2") ' ★ここに注目★ Dim serializer = New JavaScriptSerializer() model.JsonData = serializer.Serialize(codes) Return View(model) End Function End Class End Namespace
ビュー
* Index.vbhtml=> 「Japan」「UK」が選択される
@ModelType WebAppli.Models.JsonDemoModel @Code ViewData("Title") = "Index" End Code <h2>Index</h2> @Using (Html.BeginForm("SendResult", "JsonDemo", FormMethod.Post)) @<select multiple="multiple" name="@Html.NameFor(Function(model) model.JsonData)" id="sampleSelectMultiple" data-bind="options: items, optionsText: 'Text', optionsValue: 'Value'" size="7" width="200"> <option value="0">Japan</option> <option value="1">USA</option> <option value="2">UK</option> <option value="3">Australia</option> <option value="4">China</option> </select> @<input type="submit" value="Send" /> End Using <script src="">http://code.jquery.com/jquery.js"> <script type="text/javascript"> var selectValues = @Html.Raw(Model.JsonData); $('#sampleSelectMultiple').val(selectValues); </script>
【2】ビュー側で、.NETオブジェクトからJSONに変換
* 「@Html.Raw(Json.Encode(【.NETオブジェクト】))」を使用する
モデル
* JsonDemoModel.vbNamespace Models Public Class JsonDemoModel Public Property Codes As List(Of String) Public Sub New() Me.Codes = New List(Of String) End Sub End Class End Namespace
コントローラ
* JsonDemoController.vbImports System.Web.Mvc Imports WebAppli.Models Namespace Controllers Public Class JsonDemoController Inherits Controller Function Index() As ActionResult Dim model = New JsonDemoModel() model.Codes.Add("1") model.Codes.Add("3") Return View(model) End Function End Class End Namespace
ビュー
* Index.vbhtml=> 「USA」「Australia」が選択される
@ModelType WebAppli.Models.JsonDemoModel @Code ViewData("Title") = "Index" End Code <h2>Index</h2> @Using (Html.BeginForm("SendResult", "JsonDemo", FormMethod.Post)) @<select multiple="multiple" name="@Html.NameFor(Function(model) model.Codes)" id="sampleSelectMultiple" size="7" width="200"> <option value="0">Japan</option> <option value="1">USA</option> <option value="2">UK</option> <option value="3">Australia</option> <option value="4">China</option> </select> @<input type="submit" value="Send" /> End Using <script src="">http://code.jquery.com/jquery.js"> <script type="text/javascript"> @* ★ここに注目★ *@ var selectValues = @Html.Raw(Json.Encode(Model.Codes)); $('#sampleSelectMultiple').val(selectValues); </script>