Я пытаюсь получить мою строку JSON, прошедшую через ViewBag, в мой нокаут, наблюдаемый и использующий это, чтобы заполнить мультиселективный список. Я не уверен, что я делаю неправильно, но прямо сейчас он принимает каждый отдельный символ в строке JSON и вставляет его в свою собственную строку в списке выбора.получение строки 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
Я изменил C# код для создания именованных переменных в формате JSON в настоящее время. Вот мой новый выход console.log:
{"username":"BOBC","fullname":"Bob Cottin"},{"username":"JIMT","fullname":"Jim Thorpe"},{"username":"LUKEP","fullname":"Luke Peppin"}, ....}
Одна вещь, которую я сразу заметил, что вы, кажется, переписав Коммивояжёры наблюдаемым с плоское значение. «mySource.salesPeople = salesRepList», вероятно, должен быть «mySource.salesPeople (salesRepList)» –