2016-02-15 2 views
3

Мое приложение MVC 5, я использую следующий Нокаут-кендо выпадающий список:Нокаут-Кендо DropDownList Ajax observableArray выбран имя элемента

<input data-bind="kendoDropDownList: { dataTextField: 'name', dataValueField: 'id', data: foodgroups, value: foodgroup }" /> 

    var ViewModel = function() { 
     var self = this; 
     this.foodgroups = ko.observableArray([ 
     { id: "1", name: "apple" }, 
     { id: "2", name: "orange" }, 
     { id: "3", name: "banana" } 
     ]); 
     var foodgroup = 
     { 
      name: self.name, 
      id: self.id 
     }; 

     this.foodgroup = ko.observable(); 
     ko.bindingHandlers.kendoDropDownList.options.optionLabel = " - Select -"; 
     this.foodgroup.subscribe(function (newValue) { 
      newValue = ko.utils.arrayFirst(self.foodgroups(), function (choice) { 
       return choice.id === newValue; 
      }); 

      $("#object").html(JSON.stringify(newValue)); 
      alert(newValue.name); 
     }); 
    }; 
    ko.applyBindings(new ViewModel()); 

Он прекрасно работает, благодаря этому ответу Knockout Kendo dropdownlist get text of selected item

Однако когда я изменил observableArray Аяксу:

 this.foodgroups = ko.observableArray([]), 
       $.ajax({ 
        type: "GET", 
        url: '/Meals/GetFoodGroups', 

        contentType: "application/json; charset=utf-8", 
        dataType: "json", 
        success: function (data) { 
         self.foodgroups(data); 
        }, 
        error: function (err) { 
         alert(err.status + " : " + err.statusText); 
        } 
       }); 

Controller - получить таблицу из MS SQL Server:

public JsonResult GetFoodGroups() 
      { 
       var data = db.FoodGroups.Select(c => new 
       { 
        id = c.FoodGroupID, 
        name = c.FoodGroupName 
       }).ToList(); 

       return Json(data, JsonRequestBehavior.AllowGet); 
      } 

enter image description here

Я получаю эту ошибку, когда я предупрежу имя элемента

Unable to get property 'name' of undefined or null reference 

В чем разница между жестко прописывать элементы массива с помощью Ajax.

+0

Где вы получаете ошибку tis? В Ajax 'Success()'? –

+0

Когда я пытаюсь получить имя выбранного элемента. Ajax works – hncl

+0

Можете ли вы записать 'self.foodgroups()' после того, как вы присвоите данные 'success()'? –

ответ

2

Поле 'id' имеет строка тип данных в жестко закодированном массиве.

enter image description here

Поле 'Идентификатор' имеет номер тип данных в массиве АЯКС.

enter image description here.

Итак, поле «id» имеет разные типы данных в обоих массивах. Однако при условии, что вы использовали ===, поэтому он проверяет значение, а также тип данных.

enter image description here

Для АЯКС значения массива такое же, но его тип данных отличается, поэтому его не возвращает результат.

Дайте мне знать, если есть вопросы.

+0

Отличный улов, я использовал выбор возврата. Groupid === parseInt (newValue); Отлично работает, спасибо. – hncl

+0

Я имел в виду id === parseInt (newValue); – hncl

Смежные вопросы