ViewBagに渡されたJSON文字列を私のノックアウト観測値に取得しようとしていて、それを使用してマルチセレクションリストを設定します。私は何が間違っているのかよく分かっていませんが、今はJSON文字列内の個々の文字を取り出し、選択リストのそれ自身の行に貼り付けています。ここで Knockoutで観測可能なマルチセレクションリストにJSON文字列を取得
は私のC#のコントローラのコードです:Dictionary<string, string> salesReps = new Dictionary<string, string>();
foreach (var rep in salespeople.Salesperson)
{
salesReps.Add(rep.Code, rep.Code + " - " + rep.fullName);
}
//ViewBag.salespeople = salespeople.Salesperson.Select(x => x.Code).Distinct().ToList();
ViewBag.salespeople = JsonConvert.SerializeObject(salesReps);
そしてここでノックアウトコードです:
var cSource = function (data) {
var self = this;
.....
self.salesPeople = ko.observableArray();
};
$(document).ready(function() {
var modelData = @Html.Raw(Json.Encode(Model));
mySource = new cSource(modelData);
//var salesRepList = Html.Raw(Json.Encode(ViewBag.salespeople));
var salesRepList = @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(ViewBag.salespeople));
console.log(salesRepList);
mySource.salesPeople = salesRepList;
そしてここでHTMLを選択したコードです:
<select data-bind="
options: salesPeople,
selectedOptions: chosenReps,
optionsCaption: 'Choose rep(s)'
"></select>
と小さな私のconsole.logが吐き出すもののスニペット:
{"USERNAME1":"USERNAME1 - Full Name 1","USERNAME2":"USERNAME2 - Full Name 2","USERNAME3":"USERNAME3 - Full Name 3",..... }
UPDATE
私は今、JSONで名前の変数を作成するには、C#のコードを変更しました。ここに私の新しいにconsole.log出力です:
{"username":"BOBC","fullname":"Bob Cottin"},{"username":"JIMT","fullname":"Jim Thorpe"},{"username":"LUKEP","fullname":"Luke Peppin"}, ....}
ことの一つは、あなたがで観察営業担当者を上書きしているように見えるということですフラットな価値。 "mySource.salesPeople = salesRepList"はおそらく "mySource.salesPeople(salesRepList)"になるはずです –