Quantcast
Channel: プログラム の個人的なメモ
Viewing all 860 articles
Browse latest View live

【VB】C#との差異 (継承 編)

$
0
0

はじめに

http://dobon.net/vb/dotnet/vb2cs/vb2cstable.html
が助かります。

■ abstract

 * "MustInherit" "Overrides" で実装

サンプル

Public MustInherit Class BaseChartModel
   Public Overrides Sub Xxxx()

■ interface

 * "Implements" で実装

サンプル

Interface ISample
  Sub Xxxx()
End Interface

' ISampleインターフェイスの実装クラス
Class SampleClass : Implements ISample


【JavaScript】【HTML5】Web Storage (ウェブ ストレージ)

$
0
0

はじめに

クライアント側にデータを保存したい場合、クッキーがある
しかし、以下の関連記事
http://blogs.yahoo.co.jp/dk521123/28437833.html
で書いたように、容量が少ない。
~~~~
 * Cookie の有効・無効の設定はブラウザで行うことができる
 * ブラウザでは 最低 300 個のクッキー(RFC2109 より)
  => これを超えると古い方から削除される
 * 一つのクッキーあたり最低 4096 バイト(RFC2109 より)
 * 個々のホストもしくはドメイン名ごとに最低 20 個のクッキー(RFC2109 より)
~~~~
そこで、HTML5から導入された「Web Storage (ウェブ ストレージ)」について、調べてみる。

特徴

 * データ保存容量 : 5MByte~(クッキーより大容量)
 * データを利用する時のみサーバ側へ送信(クッキーよりはセキュアに利用できる)

Web Storageの種類

1) localStorage
 * ブラウザ内に永続的にデータを保存するストレージ
 * 「ドメイン:ポート番号」の単位で保存
 * データの有効期限なし

2) sessionStorage
 * ウィンドウごとのセッションで有効なストレージ
  => ウィンドウ/タブ間では、データ共有できない
  => ウィンドウ/タブが閉じられると、データは失われる

注意点

IEでの注意点

http://perutago.seesaa.net/article/206013819.html
にもあるが、以下の2点に注意。

1) インターネットオプションの[詳細設定]-[セキュリティ]-[DOMストレージを有効にする]にチェックを付ける
2) ローカルのHTMLファイルを実行した場合、localStorageオブジェクトが nullになる
 => これに、はまった...

サンプル

http://dev.classmethod.jp/references/webstrorage_favorite-condition/
を参考に、検索条件の保存を試みる
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
</head>
<body>
<div id="message"></div>
<form id='searchConditionForm'>
<table>
<tbody>
<tr>
 <td>テキストボックス</td>
 <td>
 <input name='textData' id='textData' type='text'/>
 </td>
</tr>
<tr>
 <td>ラジオボタン</td>
 <td>
  <input name='raddioData' id='raddio1' type='radio' value='1'><label for='raddio1'>Data1</label>
  <input name='raddioData' id='raddio2' type='radio' value='2'><label for='raddio2'>Data2</label>
 </td>
</tr>
<tr>
 <td></td>
 <td>
  <select name='selectData' id='selectBox' >
    <option value='a'>DataA</option>
    <option value='b'>DataB</option>
    <option value='c'>DataC</option>
    <option value='d'>DataD</option>
  </select>
 </td>
</tr>
<tr>
 <td></td>
 <td></td>
</tr>
</tbody>
</table>
<input id='buttonSeach' type='submit' value='Seach' onClick="saveSearchCondition()" /><br/>
</form>
<script type="text/javascript">
$(function() {
  // ローカルストレージの利用可否確認
  if(!localStorage) {
    document.getElementById('message').innerText = 'ローカルストレージが使えないです';
    return;
  }
  // ローカルストレージからデータを取り出し
  var searchData = localStorage.getItem('searchData');
  if (searchData) {
    searchDataset = JSON.parse(searchData);
    $('#textData').val(searchDataset.textData);
    $('#searchConditionForm input[name="raddioData"]').val([searchDataset.raddioData]);
    $('#selectBox').val([searchDataset.selectBox]);
  }
});

function saveSearchCondition() {
  var searchDataset = new Object();
  searchDataset.textData = $('#textData').val();
  searchDataset.raddioData = $('#searchConditionForm input[name="raddioData"]:radio:checked').val();
  searchDataset.selectBox = $('#selectBox').val();
  
  localStorage.setItem('searchData', JSON.stringify(searchDataset));
}
</script>
</body>
</html>

構文

Web Storageオブジェクトの取得

var 【保存していた値】 = localStorage.getItem('【キー】');

保存

localStorage.setItem('【キー】', 【保存する値】);


関連記事

クッキー関連

* 【Web開発】クッキー(Cookie)
http://blogs.yahoo.co.jp/dk521123/28437833.html
* 【ASP.NET】クッキー(Cookie)
http://blogs.yahoo.co.jp/dk521123/28439642.html

【JavaScript】JavaScriptのデータについて ~ クラス ~

$
0
0

サンプル

<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>Sample</title>
</head>
<body>
<div id="result1">result1</div>
<div id="result2">result2</div>
<div id="result3">result3</div>
<div id="result4">result4</div>
<div id="result5">result5</div>
</body>
<script type="text/javascript" charset="UTF-8">
var Gender = {
    None: 0,
    Man: 1,
    Woman: 2,
};
function Person(nameValue, genderValue) {
    this.nameValue = nameValue;
    this.genderValue = genderValue;
}

var people = [];
people["result1"] = new Person("Mike", Gender.Man);
people["result3"] = new Person("Chole", Gender.Woman);
people["result4"] = new Person("Max", Gender.Woman);

for (var keyValue in people) {
    var targePerson = people[keyValue];
    document.getElementById(keyValue).innerText =
      targePerson.nameValue + " " + targePerson.genderValue;
}

</script>
</html>

参考文献

http://www.atmarkit.co.jp/ait/articles/1011/29/news109_2.html

関連記事

JavaScriptのデータについて ~ 列挙型 ~

http://blogs.yahoo.co.jp/dk521123/35655176.html

JavaScriptのデータについて ~ 連想配列 / 配列 ~

http://blogs.yahoo.co.jp/dk521123/35654324.html

【VB】C#との差異 (拡張メソッド 編)

$
0
0

はじめに

http://blogs.yahoo.co.jp/dk521123/22569878.html
で扱った拡張メソッドは、VB.NETでも書けるのでメモ。

注意

http://www.atmarkit.co.jp/fdotnet/bookpreview/kisokaravb_1102/kisokaravb_1102_01.html
より抜粋

 * 拡張メソッドはモジュールで定義する必要がある

構文

<System.Runtime.CompilerServices.Extension()> _
Public Sub 拡張メソッド名(ByVal 引数 As 拡張すべきクラス, パラメータリスト)
   ' 拡張メソッドの定義
End Sub

サンプル

実装例
Imports System.Runtime.CompilerServices

Public Enum Gender
    None = -1
    Man
    Woman
End Enum

Public Module GenderHelper

    <Extension()>
    Public Function ToNumber(ByVal value As Gender) As Integer
        Return Convert.ToInt32(value)
    End Function

End Module
呼び出し側
Me.Gender.ToNumber()


関連記事

【C#】拡張メソッド

http://blogs.yahoo.co.jp/dk521123/22569878.html

【JavaScript】【HTML5】Web Storage を、使いやすくする

$
0
0

はじめに

http://blogs.yahoo.co.jp/dk521123/35649554.html
のサンプルを極力共通化する。

サンプル

「テキストボックス」「ラジオボタン」「セレクトボックス」「セレクトボックス(複数)」「チェックボックス」を保存する
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
</head>
<body>
<div id="message"></div>
<form id='searchConditionForm'>
<table>
<tbody>
<tr>
 <td>テキストボックス</td>
 <td>
 <input name='textData' id='textData' type='text'/>
 </td>
</tr>
<tr>
 <td>ラジオボタン</td>
 <td>
  <input name='raddioData' id='raddio1' type='radio' value='1'><label for='raddio1'>Data1</label>
  <input name='raddioData' id='raddio2' type='radio' value='2'><label for='raddio2'>Data2</label>
 </td>
</tr>
<tr>
 <td>セレクトボックス</td>
 <td>
  <select name='selectData' id='selectBox' >
    <option value='a'>DataA</option>
    <option value='b'>DataB</option>
    <option value='c'>DataC</option>
    <option value='d'>DataD</option>
  </select>
 </td>
</tr>
<tr>
 <td>セレクトボックス(複数)</td>
 <td>
  <select name='multipleData' id='multipleBox' size="4" multiple>
    <option value='A0'>Data0</option>
    <option value='A1'>Data1</option>
    <option value='A2'>Data2</option>
    <option value='A3'>Data3</option>
  </select>
 </td>
</tr>
<tr>
 <td>チェックボックス</td>
 <td>
   <input type="checkbox" id="checkbox1" name="checkboxData" class="checkboxClass" value="a1">
   <label for='checkbox1'>Data-a</label>
   <input type="checkbox" id="checkbox2" name="checkboxData" class="checkboxClass" value="a2">
   <label for='checkbox2'>Data-b</label>
   <input type="checkbox" id="checkbox3" name="checkboxData" class="checkboxClass" value="a3">
   <label for='checkbox3'>Data-c</label>
 </td>
</tr>
</tbody>
</table>
<input id='buttonSeach' type='submit' value='Seach' /><br/>
</form>
<script type="text/javascript">
var SavingKey = 'searchData';

$(function() {
  // ローカルストレージからデータを取り出し
  var searchData = loadJsonData(SavingKey);
  if (searchData) {
    $('#textData').val(searchData.textData);
    $('#searchConditionForm input[name="raddioData"]').val([searchData.raddioData]);
    $('#selectBox').val(searchData.selectBox);
    $('#multipleBox').val(searchData.multipleBox);
    $('#searchConditionForm input[name="checkboxData"]').val(searchData.checkboxData);
  }
});

$('#buttonSeach').click(function() {
  var searchDataset = new Object();
  searchDataset.textData = $('#textData').val();
  searchDataset.raddioData = $('#searchConditionForm input[name="raddioData"]:radio:checked').val();
  searchDataset.selectBox = $('#selectBox').val();
  searchDataset.multipleBox = $('#multipleBox').val();
  searchDataset.checkboxData = [];
  $('#searchConditionForm input[name="checkboxData"]:checked').each(function() {
    searchDataset.checkboxData.push($(this).val());
  });

  saveJsonData(SavingKey, searchDataset);
});

// 共通処理
function loadJsonData(key) {
  // ローカルストレージの利用可否確認
  if(!localStorage) {
    document.getElementById('message').innerText
     = 'ローカルストレージが使えないです';
    return null;
  }
  // ローカルストレージからデータを取り出し
  var loadingDataset = localStorage.getItem(key);
  if (!loadingDataset) {
    document.getElementById('message').innerText
      = 'ローカルストレージ(Key [' + key + '])にデータが保存されていません';
    return null;
  }
  
  return JSON.parse(loadingDataset);
}

// 共通処理
function saveJsonData(key, savingDataset) {
  localStorage.setItem(key, JSON.stringify(savingDataset));
}
</script>
</body>
</html>

関連記事

Web Storage (ウェブ ストレージ)

http://blogs.yahoo.co.jp/dk521123/35649554.html

【SQL】 サブクエリ / 副問合せ ~SELECT文中のSELECT文~

【ASP.NET MVC】ASP.NET MVC で、 knockout.js を使う ~入門編~

$
0
0

前提

 * 以下のJavascriptが必要。
  + knockout.-x.x.x.js
  => なかったら、以下の環境設定を行う

 ※ knockout.jsについて、以下の関連記事を参照のこと。
http://blogs.yahoo.co.jp/dk521123/35664953.html

準備:環境設定

http://blogs.yahoo.co.jp/dk521123/35596847.html
で行ったNuGetでインストールする

[1] Visual Studio で [ツール]-[NuGetパッケージ マネージャー]-[パッケージ マネージャー コンソール]を選択
[2] 以下のコマンドを入力する

Install-Package knockoutjs
https://www.nuget.org/packages/knockoutjs/

サンプル1

http://blog.shibayan.jp/entry/20111208/1323354859
を参考にサンプル(VB.NET)を作成してみた

ビュー

* Index.vbhtml
@Code
    ViewData("Title") = "Index"
End Code

<h2>Index</h2>

<ul data-bind="foreach: items">
    <li>名前: <span data-bind="text: name"></span>, 年齢: <span data-bind="text: age"></span></li>
</ul>

<script src="@Url.Content("~/Scripts/jquery-1.10.2.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/knockout-3.4.0.js")" type="text/javascript"></script>

<script type="text/javascript">
    $(function () {
        $.ajax({
            type: 'GET',
            url: '@Url.Action("GetJson")', // アクセス先のURL
        })
        .done(function (returnData) {
            var viewModel = {
                items: ko.observableArray(returnData)
            };
            ko.applyBindings(viewModel);
        });
    });
</script>

コントローラ

* SampleKnockoutController.vb
Imports System.Web.Mvc

Namespace Controllers
    Public Class SampleKnockoutController
        Inherits Controller

        Function Index() As ActionResult
            Return View()
        End Function

        Function GetJson() As ActionResult
            Dim jsonData = New List(Of Object) From
                {
                    New With {.name = "Mike", .age = 28},
                    New With {.name = "Tom", .age = 36},
                    New With {.name = "Smith", .age = 17}
                }
            Return Json(jsonData, JsonRequestBehavior.AllowGet)
        End Function
    End Class
End Namespace

出力結果

•名前: Mike, 年齢: 28
•名前: Tom, 年齢: 36
•名前: Smith, 年齢: 17

サンプル2

 * ラジオボタンに従い、サーバからデータをajaxで取得して、リストに反映
 * リスト内を選択し、ボタンを送ればサーバ側で受け取ることができる

モデル

* SampleKnockoutModel.vb
Namespace Models
    Public Class SampleKnockoutModel
        Public Property CountryId As String
        Public Property CompanyNames As List(Of String)
    End Class
End Namespace

ビュー

* Index.vbhtml
ModelType WebAppli.Models.SampleKnockoutModel

@Code
    ViewData("Title") = "Index"
End Code

<h2>Index</h2><br />
@Using (Html.BeginForm("SendResult", "SampleKnockout", FormMethod.Post))
    @Html.RadioButtonFor(Function(model) model.CountryId, "JP")
    @Html.Label("Japan")@<br />
    @Html.RadioButtonFor(Function(model) model.CountryId, "US")
    @Html.Label("USA")@<br />
    @<select multiple = "multiple" name="@Html.NameFor(Function(model) model.CompanyNames)"
             data-bind="options: items"
             size="7" width="200"></Select>
    @<input type="submit" value="Send" />
End Using

<script src="@Url.Content("~/Scripts/jquery-1.10.2.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/knockout-3.4.0.debug.js")" type="text/javascript"></script>
<script type="text/javascript">
    function ViewModel() {
        var self = this;
        self.items = ko.observableArray();
    }

    var viewModel = new ViewModel();
    ko.applyBindings(viewModel);

    $('input[name="CountryId"]:radio').change(function () {
        $.ajax({
            type: 'GET',
            url: '@Url.Action("GetList")', // アクセス先のURL
            data: {
                id: $(this).val(),
            },
        })
       .done(function (returnData) {
           viewModel.items(returnData.results);
       });
    });
</script>
* SendResult.vbhtml
@ModelType WebAppli.Models.SampleKnockoutModel

@Code
    ViewData("Title") = "SendResult"
End Code

<h2>SendResult</h2>

<p>ID : @Model.CountryId </p>

@For Each companyName In Model.CompanyNames
    @<p>companyName : @companyName</p>
Next

コントローラ

* SampleKnockoutController.vb
Imports System.Web.Mvc
Imports WebAppli.Models

Namespace Controllers
    Public Class SampleKnockoutController
        Inherits Controller

        Private CompanyInfoDictinary As Dictionary(Of String, List(Of String))

        Public Sub New()
            CompanyInfoDictinary = New Dictionary(Of String, List(Of String)) From
            {
            {"JP", New List(Of String)(New String() {"Sony", "Hitachi", "Toshiba", "Fujitsu"})},
            {"US", New List(Of String)(New String() {"Google", "Yahoo", "Microsoft"})}
            }
        End Sub

        Function Index() As ActionResult
            Return View()
        End Function

        Function GetList(ByVal id As String) As ActionResult
            Dim sendingValues = CompanyInfoDictinary(id)
            Return Json(New With {
                        .results = sendingValues},
                        JsonRequestBehavior.AllowGet)
        End Function

        Function SendResult(ByVal model As SampleKnockoutModel) As ActionResult
            Return View(model)
        End Function

    End Class
End Namespace


関連記事

knockout.js ~入門編~

http://blogs.yahoo.co.jp/dk521123/35664953.html

【JavaScript】 knockout.js ~入門編~

$
0
0

Knockout(ノックアウト)とは?

 * Model-View-ViewModel(MVVM)パターンをサポートするライブラリ

何ができる?

 * 双方向バインディング

環境構築

[1] 以下のサイトからJSをダウンロードする
 or
    CDN(Content Delivery Networks)用のURL(http://ajax.aspnetcdn.com/ajax/knockout/knockout-3.3.0.js)をコピーする
http://knockoutjs.com/downloads/index.html
[2] コンテンツをインポートする

<script type='text/javascript' src='http://ajax.aspnetcdn.com/ajax/knockout/knockout-3.3.0.js'></script>

サンプル

例1:Hello World!

<html>
<head>
<meta charset="UTF-8">
<script type='text/javascript' src='http://ajax.aspnetcdn.com/ajax/knockout/knockout-3.3.0.js'></script>
</head>
<body>
<div data-bind="text: message"></div>
<script>
window.onload = function() {
    var viewModel = {message: 'Hello World!'};
    ko.applyBindings(viewModel);
};
</script>
</body>
</html>

出力結果

Hello World!

例2:SELECT BOX

http://jsfiddle.net/MikeEast/nM6dd/2/
より
<html>
<head>
<meta charset="UTF-8">
<script type='text/javascript' src='http://ajax.aspnetcdn.com/ajax/knockout/knockout-3.3.0.js'></script>
</head>
<body>
<div>
<select data-bind="options: items, optionsText: 'name', value: selected"></select>
<span data-bind="text: selected().name"></span>
<script type="text/javascript">
var ViewModel = function () {
   this.items = ko.observableArray([
       { id: 1, name: "Mike" }, 
       { id: 2, name: "Tom"},
       { id: 3, name: "Smith"}
   ]);
   this.selected = ko.observable();
};

ko.applyBindings(new ViewModel());
</script>
</body>
</html>

例3:SELECT BOX/multiple

<html>
<head>
<meta charset="UTF-8">
<script type='text/javascript' src='http://ajax.aspnetcdn.com/ajax/knockout/knockout-3.3.0.js'></script>
</head>
<body>
<select size="5" multiple
 data-bind="options: array, selectedOptions: selectedArray"></select>
<script>
    var viewModel = {
        array: ['Japan', 'USA', 'UK', 'China', ''],
        selectedArray: ['USA', 'China']
    };

    ko.applyBindings(viewModel);
</script>
</body>
</html>



関連記事

ASP.NET MVC で、 knockout.js を使う ~入門編~

http://blogs.yahoo.co.jp/dk521123/35660898.html

UIアーキテクチャ・パターン(MVVM / MVPVM)

http://blogs.yahoo.co.jp/dk521123/22001152.html

knockout.js ~基礎編~

http://blogs.yahoo.co.jp/dk521123/35665471.html

【JavaScript】 knockout.js ~基礎編~ [1]

$
0
0

はじめに

 * 以下の関連記事の続き。今回は、よく使う基本的な事項をまとめる。
http://blogs.yahoo.co.jp/dk521123/35664953.html

■表示/非表示

 * visible (if) / checked を使用

サンプル

http://kojs.sukobuto.com/docs/if-binding
http://tech.aainc.co.jp/archives/5346
より
<html>
<head>
<meta charset="UTF-8">
<script type='text/javascript' src='http://ajax.aspnetcdn.com/ajax/knockout/knockout-3.3.0.js'></script>
</head>
<body>
<input type="checkbox" data-bind="checked: isVisibleMessage" />
<label for="label">メッセージを表示する?</label>
<div data-bind="visible: isVisibleMessage">表示した?</div>
<div data-bind="if: isVisibleMessage">表示した(ifで)?</div>
<script>
ko.applyBindings({
    isVisibleMessage: ko.observable(false)
});
</script>
</body>
</html>

■活性/非活性

 * enable / checked を使用
http://knockoutjs.com/documentation/enable-binding.html

サンプル

<html>
<head>
<meta charset="UTF-8">
<script type='text/javascript' src='http://ajax.aspnetcdn.com/ajax/knockout/knockout-3.3.0.js'></script>
</head>
<body>
<input id="r1" type="radio" name="sampleRadio" value="msg1" data-bind="checked: sampleRadioValue" />
<label for="r1">メッセージ1</label><br />
<input id="r2" type="radio" name="sampleRadio" value="msg2" data-bind="checked: sampleRadioValue" />
<label for="r1">メッセージ2</label><br />
<input id="r3" type="radio" name="sampleRadio" value="msg3" data-bind="checked: sampleRadioValue" />
<label for="r1">メッセージ3</label><br />
<br />
<input type="text" data-bind="enable: viewModel.sampleRadioValue() === 'msg1'" value="メッセージ1" /><br />
<input type="text" data-bind="enable: viewModel.sampleRadioValue() === 'msg2'" value="メッセージ2" /><br />
<input type="text" data-bind="enable: viewModel.sampleRadioValue() === 'msg3'" value="メッセージ3" /><br />

<script type="text/javascript">
var viewModel = {
  sampleRadioValue: ko.observable('msg1'),
};

ko.applyBindings(viewModel);
</script>
</body>
</html>
ほかにも以下のサイトのように「enable: itemToAdd().length > 0」などして、ボタンを非活性にする等の利用法がある
http://kojs.sukobuto.com/tips/betterList

■ループする

 * foreach を使用

サンプル

http://madroom-project.blogspot.jp/2014/08/knockoutjsforeach.html
より
<html>
<head>
<meta charset="UTF-8">
<script type='text/javascript' src='http://ajax.aspnetcdn.com/ajax/knockout/knockout-3.3.0.js'></script>
</head>
<body>
<ul data-bind="foreach: {data: arrayValues, as: '$arrayValue' }">
    <li data-bind="text: $arrayValue"></li>
</ul>
<script>
function ViewModel() {
    var self = this;
    self.arrayValues = ko.observableArray(['Mike', 'Tom', 'Smith']);
};
ko.applyBindings(new ViewModel());
</script>
</body>
</html>

■他の値の変更を検知して、自身の値を変える場合

 * dependentObservable を使用
  => 他の値の変更を検知して、自身の値を変える
http://qiita.com/tenntenn/items/55fd8fc98cf29b1e43e5

サンプル

http://blog.shibayan.jp/entry/20111208/1323354859
より
<html>
<head>
<meta charset="UTF-8">
<script type='text/javascript' src='http://ajax.aspnetcdn.com/ajax/knockout/knockout-3.3.0.js'></script>
</head>
<body>
<input type="text" data-bind="value: left" /> + <input type="text" data-bind="value: right" /> = <span data-bind="text: answer"></span>
<script type="text/javascript">
var viewModel = {
    left: ko.observable(0),
    right: ko.observable(0)
};

viewModel.answer = ko.dependentObservable(function () {
    return parseInt(this.left()) + parseInt(this.right());
}, viewModel);

ko.applyBindings(viewModel);
</script>
</body>
</html>

関連記事

knockout.js ~入門編~

http://blogs.yahoo.co.jp/dk521123/35664953.html

【トラブル】【JavaScript】【HTML5】Web Storage (ウェブ ストレージ) でのトラブル

$
0
0

はじめに

 * Web Storage を使用して、(今のところIEのみで)はまった点をメモっとく。

IEでの注意点

■ localStorageオブジェクトが nullになる要因

他にもあるかもしれないが
[1] Web Storageのサポートバージョン外である
[2] IEのインターネットオプションの[詳細設定]-[セキュリティ]-[DOMストレージを有効にする]に
    チェックを付いていない
[3] ローカルのHTMLファイルを実行した場合、localStorageオブジェクトが nullになる
 => これに、はまった...

参考文献

[2][3] で。助かりました...
http://perutago.seesaa.net/article/206013819.html

■ ローカルストレージに保存はできたが、ブラウザ終了後に再度参照するとnullになる要因

[1] IEのインターネットオプションの[詳細設定]-[全般]-[終了時に閲覧の履歴を削除する]に
    チェックが付いている
 => これにも、はまった。自力でなんとか。

[2] ポート番号(かプロトコルかドメイン)が変わった(オリジン単位なので)

関連記事

Web Storage (ウェブ ストレージ)

http://blogs.yahoo.co.jp/dk521123/35649554.html

Web Storage を、使いやすくする

http://blogs.yahoo.co.jp/dk521123/35656214.html

【ASP.NET MVC】【VB.NET】ASP.NET MVC で、 knockout.js を使う ~基本編~

$
0
0

はじめに

http://blogs.yahoo.co.jp/dk521123/35660898.html
で環境構築や簡単なサンプルを作成した。
今度は、Modelも加えて一連の動きをするシンプルなサンプルを作成してみる。

サンプル

 * ラジオボタンに従い、サーバからデータをajaxで取得して、リストに反映
 * リスト内を選択し、ボタンを送ればサーバ側で受け取ることができる

モデル

* SampleKnockoutModel.vb
Namespace Models

    Public Class SampleKnockoutModel
        Public Property CountryId As String
        Public Property CompanyNames As List(Of ListItem)
        Public Property CompanyIds As List(Of String)
    End Class

End Namespace

ビュー

* Index.vbhtml
@ModelType WebAppli.Models.SampleKnockoutModel

@Code
    ViewData("Title") = "Index"
End Code

<h2>Index</h2><br />
@Using (Html.BeginForm("SendResult", "SampleKnockout", FormMethod.Post))
    @Html.RadioButtonFor(Function(model) model.CountryId, "JP")
    @Html.Label("Japan")@<br />
    @Html.RadioButtonFor(Function(model) model.CountryId, "US")
    @Html.Label("USA")@<br />
    @<select multiple = "multiple" name="@Html.NameFor(Function(model) model.CompanyIds)"
             data-bind="options: items, optionsText: 'Text', optionsValue: 'Value'"
             size="7" width="200"></Select>
    @<input type="submit" value="Send" />
End Using

<script src="@Url.Content("~/Scripts/jquery-1.10.2.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/knockout-3.4.0.debug.js")" type="text/javascript"></script>
<script type="text/javascript">
    function ViewModel() {
        var self = this;
        self.items = ko.observableArray();
    }

    var viewModel = new ViewModel();
    ko.applyBindings(viewModel);

    $('input[name="CountryId"]:radio').change(function () {
        $.ajax({
            type: 'GET',
            url: '@Url.Action("GetList")', // アクセス先のURL
            data: {
                id: $(this).val(),
            },
        })
       .done(function (returnData) {
           viewModel.items(returnData.results);
       });
    });
</script>
* SendResult.vbhtml
@ModelType WebAppli.Models.SampleKnockoutModel

@Code
    ViewData("Title") = "SendResult"
End Code

<h2>SendResult</h2>

<p>ID : @Model.CountryId </p>

@For Each companyId In Model.CompanyIds
    @<p>Company ID : @companyId</p>@<br />
Next

コントローラ

* SampleKnockoutController.vb
Imports System.Web.Mvc
Imports WebAppli.Models

Namespace Controllers
    Public Class SampleKnockoutController
        Inherits Controller

        Private CompanyInfoDictinary As Dictionary(Of String, List(Of ListItem))

        Public Sub New()
            CompanyInfoDictinary = New Dictionary(Of String, List(Of ListItem)) From
                {
                {"JP", New List(Of ListItem) From
                {
                New ListItem() With {.Value = "J01", .Text = "Sony"},
                New ListItem() With {.Value = "J02", .Text = "Hitachi"},
                New ListItem() With {.Value = "J03", .Text = "Toshiba"},
                New ListItem() With {.Value = "J04", .Text = "Fujitsu"}
            }
            },
                        {"US", New List(Of ListItem) From
            {
               New ListItem() With {.Value = "U01", .Text = "Google"},
               New ListItem() With {.Value = "U02", .Text = "Yahoo"},
               New ListItem() With {.Value = "U03", .Text = "Microsoft"}
            }
            }
            }
        End Sub

        Function Index() As ActionResult
            Return View()
        End Function

        Function GetList(ByVal id As String) As ActionResult
            Dim sendingValues = CompanyInfoDictinary(id)
            Return Json(New With {
                        .results = sendingValues},
                        JsonRequestBehavior.AllowGet)
        End Function

        Function SendResult(ByVal model As SampleKnockoutModel) As ActionResult
            Return View(model)
        End Function

    End Class
End Namespace

参考文献

 * 以下のサイトでいくつかのヒントを得られた。感謝。
http://miso-soup3.hateblo.jp/entry/2013/07/18/141908

関連記事

ASP.NET MVC で、 knockout.js を使う ~入門編~

http://blogs.yahoo.co.jp/dk521123/35660898.html

【ASP.NET MVC】【VB.NET】ASP.NET MVC で、 knockout.js を使う ~基本編~ [2]

$
0
0

はじめに

http://miso-soup3.hateblo.jp/entry/2013/07/18/141908
を参考に、セレクトボックス同士が連動したサイトを、VB.NETで作ってみた

サンプル

 * 国を選んだら、会社リストが出てくるものを作る

モデル

* CompanyModel.vb
Namespace Models

    Public Class CompanyModel
        Public Property CountryId As String
        Public Property CompanyId As String
    End Class

End Namespace

コントローラ

* SampleKnockoutController.vb
Imports System.Web.Mvc
Imports WebAppli.Models

Namespace Controllers
    Public Class SampleKnockoutController
        Inherits Controller

        Private CompanyInfoDictinary As Dictionary(Of String, List(Of ListItem))

        Public Sub New()
            CompanyInfoDictinary = New Dictionary(Of String, List(Of ListItem)) From
                {
                {"JP", New List(Of ListItem) From
                {
                New ListItem() With {.Value = "J01", .Text = "Sony"},
                New ListItem() With {.Value = "J02", .Text = "Hitachi"},
                New ListItem() With {.Value = "J03", .Text = "Toshiba"},
                New ListItem() With {.Value = "J04", .Text = "Fujitsu"}
            }
            },
            {"US", New List(Of ListItem) From
            {
               New ListItem() With {.Value = "U01", .Text = "Google"},
               New ListItem() With {.Value = "U02", .Text = "Yahoo"},
               New ListItem() With {.Value = "U03", .Text = "Microsoft"}
            }
            }
            }
        End Sub

        Function SampleView() As ActionResult
            Return View()
        End Function

        <HttpGet>
        Function GetCountries() As ActionResult
            Dim jsonData = New List(Of ListItem) From
                {
                    New ListItem() With {.Value = "JP", .Text = "Japan"},
                    New ListItem() With {.Value = "US", .Text = "USA"}
                }
            Return Json(jsonData, JsonRequestBehavior.AllowGet)
        End Function

        <HttpGet>
        Function GetCompanies(ByVal countryId As String) As ActionResult
            Dim jsonData = Me.CompanyInfoDictinary(countryId)
            Return Json(jsonData, JsonRequestBehavior.AllowGet)
        End Function

        <HttpPost>
        Function SendComapnyData(ByVal model As CompanyModel) As ActionResult
            Return View(model)
        End Function

    End Class
End Namespace

ビュー

* SampleView.vbhtml
@ModelType WebAppli.Models.CompanyModel

@Code
    ViewData("Title") = "SampleView"
End Code

<h2>SampleView</h2>

@Using (Html.BeginForm("SendComapnyData", "SampleKnockout", FormMethod.Post))
@<table>
    <thead>
        <tr>
            <th width ='45%'>国コード</th>
            <th width='45%'>会社</th>
            <th width ='10%'> </th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>
                <select data-bind='options: countries, optionsText: "Text", optionsValue: "Value",
                        value: selectedCountry, optionsCaption: "選択..."'
                        name="@Html.NameFor(Function(model) model.CountryId)"> </select>
            </td>
            <td>
                <select data-bind="options: comapanies, optionsText: 'Text', optionsValue: 'Value',
                        value: selectedCompany, optionsCaption: '選択...', enable: comapanies().length !== 0"
                        name="@Html.NameFor(Function(model) model.CompanyId)"></Select>
            </td>
            <td>
                <input type="submit" value="Send" />
            </td>
                                                                                            </tr>
    </tbody>
</table>
End Using

<script src = "@Url.Content("~/Scripts/jquery-1.10.2.js")" type="text/javascript"></script>
<script src = "@Url.Content("~/Scripts/knockout-3.4.0.debug.js")" type="text/javascript"></script>
<script type = "text/javascript" >
    $(function () {
        var sampleViewModel = {
            countries: ko.observableArray([]),
            comapanies: ko.observableArray([]),
            selectedCountry: ko.observable(),
            selectedCompany: ko.observable(),
            setCountries: function () {
                // 国コード(第一セレクトボックス)のデータ取得
                $.ajax({
                    type: 'GET',
                    url: '@Url.Action("GetCountries")', // アクセス先のURL
                    dataType: 'json',
                    cache: false,
                    success: function (data) {
                        sampleViewModel.countries(data);
                    }
                });
            }
        }
 
        sampleViewModel.selectedCountry.subscribe(function (selectedCountryId) {
            if(!selectedCountryId) {
                sampleViewModel.comapanies([]);
            }

            // 会社コード(第二セレクトボックス)のデータ取得
            $.ajax({
                type: 'GET',
                url: '@Url.Action("GetCompanies")', // アクセス先のURL
                data: { countryId: selectedCountryId },
                dataType: 'json',
                cache: false,
                success: function (data) {
                    sampleViewModel.comapanies(data);
                    sampleViewModel.selectedCompany('');
                }
            });
        });

        ko.applyBindings(sampleViewModel);
        sampleViewModel.setCountries();
    });
</script>
* SendComapnyData.vbhtml
@ModelType WebAppli.Models.CompanyModel

@Code
    ViewData("Title") = "SendComapnyData"
End Code

<h2>SendComapnyData</h2>

<p>CountryId : @Model.CountryId </p>
<p>CompanyId : @Model.CompanyId </p>

関連記事

ASP.NET MVC で、 knockout.js を使う ~入門編~

http://blogs.yahoo.co.jp/dk521123/35660898.html

ASP.NET MVC で、 knockout.js を使う ~基本編~ [1]

http://blogs.yahoo.co.jp/dk521123/35669223.html

【JavaScript】 knockout.js ~構文編~

$
0
0

■ テキスト及び表現

`属性
`#
説明
01visible要素の表示と非表示を切り替える
02text要素の内容を設定できる
03html設定値により、要素の子を設定できる
04cssCSSを設定できる
05stylestyle値を追加できる
06attr属性値を設定できる

関連記事

visible
http://blogs.yahoo.co.jp/dk521123/35665471.html

■ フロー制御

`属性
`#
説明
01foreachループ処理
02if要素の子が表示されるかどうかを決定
03ifnot要素の子が非表示されるかどうかを決定
04with要素に子オブジェクトを表示する際に使用する

参考文献

with
http://kojs.sukobuto.com/docs/with-binding

関連記事

foreach
http://blogs.yahoo.co.jp/dk521123/35665471.html

■ フォーム部品にバインド

`属性
`#
説明
01clickクリックのハンドラー
02event指定されたイベントのハンドラー
03submitフォームが送信時のハンドラー
04enable活性を切り替える
05disable非活性を切り替える
06valuevalue値を設定。初期値を設定
07textInputvalue値を設定。リアルタイムに値を反映
08hasfocusフォーカスを当てる
09checkedラジオボタンやチェックボックスに対してバインディングするために使用
10optionselect要素の配下のoptionの値を設定
11selectedOptions複数選択可能なselectの値を設定

参考文献

textInput
http://blog.shibayan.jp/entry/20140819/1408375428

関連記事

enable / value / checked / option / selectedOptions
http://blogs.yahoo.co.jp/dk521123/35665471.html


関連記事

knockout.js ~入門編~

http://blogs.yahoo.co.jp/dk521123/35664953.html

【ASP.NET MVC】【Razor】【VB】 Razor ~ ビュー・ヘルパー / 構文編 ~

$
0
0

■ Htmlヘルパー

フォーム生成

`メソッド名
`#
説明
01Html.BeginFormメソッドフォームを生成する
02Html.BeginRouteFormメソッドルート定義に基づいてフォームを生成する

表示系(Readonly)

`メソッド名
`#
説明
01Html.LabelForメソッドラベルを生成する
02Html.DisplayForメソッドDivを生成する
03Html.RawメソッドHTMLエンコードを無効にする

注意

[1] @Html.LabelFor について
 * 「.」(ピリオド)があるとその前の文字が表示されなくなる

【例】
@Html.Label("Hello.World!")
 => 「World!」と表示される
[2] @Html.Raw について
 * むやみに利用すると、クロスサイト・スクリプティング脆弱性の原因に直結するので注意

参考文献

* Html.Raw()
http://www.buildinsider.net/web/bookaspmvc5/040304

表示系(Read-Write/キー入力系)

`メソッド名
`#
説明
01Html.TextBoxForメソッドテキストボックスを生成する
02Html.PasswordForメソッドパスワード入力ボックスを生成する
03Html.TextAreaForメソッドテキストエリアを生成する

表示系(Read-Write/選択系)

`メソッド名
`#
説明
01Html.CheckBoxForメソッドチェックボックスを生成する
02Html.RadioButtonForメソッドラジオボタンを生成する
03Html.ListBoxForメソッドリストボックスを生成する
04Html.DropDownListForメソッド選択ボックスを生成する
05Html.EnumDropDownListメソッドEnum型をもとに選択ボックスを生成する

表示系(Read-Write/その他系)

`メソッド名
`#
説明
01Html.HiddenForメソッド隠しフィールドを生成する
02Html.EditorForメソッドテキストボックス/チェックボックスを生成する

画面遷移系

`メソッド名
`#
説明
01Html.ActionLinkメソッドハイパーリンクを生成する
02Html.RouteLinkメソッドルート定義からハイパーリンクを生成する

参考文献

* Html.RouteLink()
http://www.buildinsider.net/web/bookaspmvc5/040304

■ Urlヘルパー

フォーム生成

`メソッド名
`#
説明
01Url.Contentメソッド「~/」で始まる仮想パスを、アプリケーションルートからの絶対パスに変換
02Url.Actionメソッド指定されたコントローラー/アクション名、その他パラメーター情報をもとに、絶対パスを生成
03Url.RouteUrlメソッドルートパラメーターから絶対パスを生成

参考文献

http://www.buildinsider.net/web/bookaspmvc5/040303


関連記事

Razor ~入門編~

http://blogs.yahoo.co.jp/dk521123/35586581.html

Razor ~ ビュー・ヘルパー / サンプル編 ~ [1]

http://blogs.yahoo.co.jp/dk521123/35592671.html

Razor ~ ビュー・ヘルパー / サンプル編 ~ [2]

http://blogs.yahoo.co.jp/dk521123/35591389.html

Razor ~ ビュー・ヘルパー / サンプル編 ~ [3]

http://blogs.yahoo.co.jp/dk521123/35609153.html

【JS】【jQuery】jQuery 文法編

$
0
0

html

* 該当箇所の中身のテキストを差し替える

サンプル

$("#sample").html("書き換える");

append

* 該当箇所の中身のテキストに追加する

サンプル

$("#sample").append ("この文字列を書き足す");

■パターン1

$("[任意のタグ名]")

* 「ドキュメント内の全てのタグ要素」が対象

サンプル

$("p").html("ドキュメント内の全てのp要素");

■パターン2

$("#[任意の文字列]")

* 「id="[任意の文字列]"の属性」が対象

サンプル

$("#aaa").append("id='aaa'");

■パターン3

$(".[任意の文字列]")

* 「class="[任意の文字列]"の属性」が対象

サンプル

$(".aaa").append("class='aaa'");

■パターン4

$("[任意のタグ名].[任意の文字列]")

* 「class="[任意の文字列]"の属性を持つタグ名」が対象

サンプル

$("h1.aaa").html("class='aaa'のh1要素");

■パターン5

$("[任意のタグ名]#[任意の文字列]")

* 「id="[任意の文字列]"の属性を持つタグ名」が対象

サンプル

$("h2#aaa").html("id='aaa'のh2要素");

■パターン6

$("[任意のタグ名1], [任意のタグ名2], ...")

* 「ドキュメント内の全てのタグ名1, タグ名2」が対象

サンプル

$("h3, h4").html("h3, h4タグが対象");



【ソース管理ツール】 Team Foundation Server (TFS) あれこれ

$
0
0

■ シェルブ/アンシェルブについて

シェルブ(一時共有)

 * 日本語訳だと、棚上げ
 * ローカルの変更をサーバに保存
   => ただし、最新のバージョンを取得しても反映されません

【手順】
 * 右クリックし、[ソース管理]-[保留中の変更をシェルブ]を選択

アンシェルブ

 * シェルブしたコードを、他のマシンで取り出すこと

【手順】
 * 右クリックし、[ソース管理]-[保留中の変更をシェルブ]を選択

使いどころ

 * ソースコードをチェックインしたくはないけど、バックアップとしてサーバに保存したい場合
 * コードレビューはシェルブで保存し、レビュー担当者のチェックが終わってからチェックインを行う場合

など

参考文献

http://www.atmarkit.co.jp/fdotnet/introtfs/introtfs03/introtfs03_03.html
http://aruhi00.hatenablog.com/entry/20130514/p1
http://blog.livedoor.jp/roger5825/archives/25178627.html

■ 無償版

 * TFS Express(5人まで無償で使用可能)

参考文献

http://www.atmarkit.co.jp/ait/articles/1303/01/news082_2.html

関連記事

VSS (Visual SourceSafe) あれこれ

http://blogs.yahoo.co.jp/dk521123/6746445.html

【ASP.NET MVC】【VB】Minify & BundleをASP.NET MVC で使う

$
0
0

はじめに

 * CSSとJavaScriptをMinify(ミニファイ。リソースの圧縮)化したかったので、
   ASP.NET MVCでどう実現するか調べてみた。

Minifyとは?

 * JavaScriptやCSSなどで、余分なスペース、改行などの不要なバイトを取り除くこと

  => パフォーマンスをあげるため。

サンプル

Global.asax.vb

* 既存の処理に以下の「★追加★」を追加
Imports System.Web.Mvc
Imports System.Web.Optimization
Imports System.Web.Routing

Public Class MvcApplication
    Inherits System.Web.HttpApplication

    Protected Sub Application_Start()
        AreaRegistration.RegisterAllAreas()
        RouteConfig.RegisterRoutes(RouteTable.Routes)

        ' ★追加★
        BundleConfig.RegisterBundles(BundleTable.Bundles)
    End Sub
End Class

/App_Start/BundleConfig.vb

* App_Start配下に追加
Imports System.Web.Optimization

Public Module BundleConfig
    Public Sub RegisterBundles(ByVal bundles As BundleCollection)
        bundles.Add(New ScriptBundle("~/bundles/jsHello").Include(
                "~/Scripts/HelloWorld.js"))
        bundles.Add(New StyleBundle("~/bundles/cssHello").Include(
                    "~/Content/HelloWorld.css"))

    End Sub
End Module

/Scripts/HelloWorld.js

* Scripts配下にテスト用のJSを追加
/**
 * Hello World.js.
 */
function sayHello(id, message) {
    document.getElementById(id).innerText = message;
}

/Content/HelloWorld.css

* Content配下にテスト用のCSSを追加
/**
 * Hello World.css.
 */

div {
    color:red;
}

ビュー(任意のビュー)

<h2>View</h2>

<div id="hello"></div>

<script src="@Url.Content("~/bundles/jsHello")" type="text/javascript"></script>
<link href="@Url.Content("~/bundles/cssHello")" rel="stylesheet" type="text/css" />
<script>
    sayHello("hello", "Hello World!!");

</script>

出力結果

<div id="hello"></div>

<script src="/bundles/jsHello" type="text/javascript"></script>
<link href="/bundles/cssHello" rel="stylesheet" type="text/css" />
<script>
    sayHello("hello", "Hello World!!");

</script>

/bundles/HelloWorldの中身

★ここに注目★コメント文や無駄な空白が削除されている
function sayHello(n,t){document.getElementById(n).innerText=t}

/bundles/cssHelloの中身

★ここに注目★コメント文や無駄な空白が削除されている
div{color:red}

【SQL】過去直近データを取得するには...

$
0
0

構文

SELECT
  * 
FROM
  テーブル名
WHERE
  カラム名 = (SELECT MAX(カラム名) FROM テーブル名 WHERE カラム名 <= 対象日付)

サンプル

使用するテーブル

 * SQL Server2008 R2の場合

テーブル定義

CREATE TABLE item
(
  id char(8),
  name varchar(100),
  price int,
  updatedate datetime
);

データ

INSERT INTO item(
            id, name, price, updatedate)
    VALUES 
     ('I0000001', 'apple', 100, '2014-01-02 12:20:22'),
     ('I0000001', 'apple', 100, '2014-01-02 13:20:22'),
     ('I0000001', 'apple', 101, '2014-11-22 12:23:22'),
     ('I0000001', 'apple', 99, '2014-10-02 12:10:23'),
     ('I0000001', 'apple', 120, '2014-06-02 12:23:22');

SQL文

DECLARE @target_date datetime;
SET @target_date =  '2014-11-01';

SELECT
    i.id
   ,i.name
   ,i.price
   ,i.updatedate
FROM
 item AS i 
WHERE
 updatedate = 
  (SELECT MAX(updatedate) AS latest FROM item WHERE updatedate <= @target_date)

出力結果

id        name   price  updatedate
I0000001  apple  99     2014-10-02 12:10:23.000


関連記事

サブクエリ / 副問合せ ~SELECT文中のSELECT文~

http://blogs.yahoo.co.jp/dk521123/35657803.html

最新日付データを取得するには...

http://blogs.yahoo.co.jp/dk521123/34098423.html

【JavaScript】【JQuery】 JavaScript / JQuery で 配列 / JSON をループする

$
0
0

■ JavaScript で 配列 / JSON を ループさせる

サンプル(JQuery使用しない場合)

<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<script type="text/javascript">
var values = [
   ["x", "Math", "English", "Science"],
   ["y", "67", "89", "92"],
];

for (var i in values) {
   for (var j = 0; j < values[i].length; j++) {
      document.write(values[i][j] + '<br>');
   }
}
</script>
</body>
</html>

出力結果

x
Math
English
Science
y
67
89
92

参考文献

http://kreisel.fam.cx/webmaster/clog/2010-06-26-1.html

■ JQuery で 配列 / JSON を ループさせる

サンプル(JQuery使用する場合)

<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<script src="http://code.jquery.com/jquery.js"></script>
<script type="text/javascript">
var values = [
   ["x", "Math", "English", "Science"],
   ["y", "67", "89", "92"],
];

$.each(values, function(i, elements) {
   $.each(elements, function(j, value) {
      document.write(value + '<br>');
   });
});
</script>
</body>
</html>

出力結果

「サンプル(JQuery使用しない場合)」と同じなので省略。

参考文献

http://www.buildinsider.net/web/jqueryref/011

【ASP.NET MVC】 .NETオブジェクト から JavaScriptオブジェクト(JSON)に変換するには...

$
0
0

【1】コントローラ側で、.NETオブジェクトからJSONに変換

 * 「JavaScriptSerializer」を使用する
 * 以下の関連記事でも使用している。
http://blogs.yahoo.co.jp/dk521123/35646695.html

モデル

* JsonDemoModel.vb
Namespace Models
    Public Class JsonDemoModel
        Public Property JsonData As String
    End Class
End Namespace

コントローラ

* JsonDemoController.vb
Imports 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>
<script type="text/javascript">
    var selectValues = @Html.Raw(Model.JsonData);
    $('#sampleSelectMultiple').val(selectValues);
</script>

【2】ビュー側で、.NETオブジェクトからJSONに変換

 * 「@Html.Raw(Json.Encode(【.NETオブジェクト】))」を使用する

モデル

* JsonDemoModel.vb
Namespace 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.vb
Imports 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>
<script type="text/javascript">
    @* ★ここに注目★ *@
    var selectValues = @Html.Raw(Json.Encode(Model.Codes));
    $('#sampleSelectMultiple').val(selectValues);
</script>

関連記事

ASP.NET MVC で、 C3.jsと連携してグラフを描画するには... [2]

http://blogs.yahoo.co.jp/dk521123/35646695.html
Viewing all 860 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>