Пользовательский JSON не работает в нокауте

0

У меня есть этот HTML:

  <select data-bind="options: products, optionsText:Nome"></select>

И этот сценарий:

var ViewModel = function () {
    var self = this;
    var dados;
    self.category = ko.observable();
};

var products;

$.ajax({
    type: "GET",
    url: "/api/APIProduto",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (data) {
        //products = [{ "products": [{ "CadastroItemOrcamento": [], "ID": 8, "MarcaNome": "MudarNome", "MarcaEspecificacao": "INOCULANTE", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 9, "MarcaNome": "MudarNome", "MarcaEspecificacao": "STANDAK TOP", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 10, "MarcaNome": "MudarNome", "MarcaEspecificacao": "BROADACRE EXTRA", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 11, "MarcaNome": "MudarNome", "MarcaEspecificacao": "BOOSTER", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 12, "MarcaNome": "MudarNome", "MarcaEspecificacao": "CLORETO DE POTÁSSIO", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 13, "MarcaNome": "MudarNome", "MarcaEspecificacao": "PRIORIXTRA", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 14, "MarcaNome": "MudarNome", "MarcaEspecificacao": "APROUCH PRIMA", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 15, "MarcaNome": "MudarNome", "MarcaEspecificacao": "GLIFOSATO", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 16, "MarcaNome": "MudarNome", "MarcaEspecificacao": "LANNATE BR", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 17, "MarcaNome": "MudarNome", "MarcaEspecificacao": "NOMOLT", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 18, "MarcaNome": "MudarNome", "MarcaEspecificacao": "PREMIO", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 19, "MarcaNome": "MudarNome", "MarcaEspecificacao": "ÓLEO MINERAL (FUNGICIDA)", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 20, "MarcaNome": "MudarNome", "MarcaEspecificacao": "ÓLEO MINERAL (HERBICIDA)", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 21, "MarcaNome": "MudarNome", "MarcaEspecificacao": "ESPALHANTE SILICONADO (TODOS)", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 22, "MarcaNome": "MudarNome", "MarcaEspecificacao": "BROADACRE MN", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 23, "MarcaNome": "MudarNome", "MarcaEspecificacao": "GROWFLOW", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 24, "MarcaNome": "MudarNome", "MarcaEspecificacao": "BORO SUPER", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 25, "MarcaNome": "MudarNome", "MarcaEspecificacao": "REFORCE", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 26, "MarcaNome": "MudarNome", "MarcaEspecificacao": "AGRIK", "MarcaAtiva": true }], "Nome": "MudarNome" }, { "products": [{ "CadastroItemOrcamento": [], "ID": 4, "MarcaNome": "MudarNomeTeste", "MarcaEspecificacao": "SUPERFOSFATO SIMPLES", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 5, "MarcaNome": "MudarNomeTeste", "MarcaEspecificacao": "ROUNDUP", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 6, "MarcaNome": "MudarNomeTeste", "MarcaEspecificacao": "ÓLEO MINERAL", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 7, "MarcaNome": "MudarNomeTeste", "MarcaEspecificacao": "SEMENTE DE SOJA", "MarcaAtiva": true }], "Nome": "MudarNomeTeste" }];
        products = data
        console.log(data)
        ko.applyBindings(ViewModel());

    },
    error: function (error) {
        alert(error.status + "<--and--> " + error.statusText);
    }
});

Операция работает, если я использую встроенный аякс. Если я использую результат данных из API (MVC/С#):

public string GetCadastroProdutoes()
{
    var data = from a in db.CadastroProduto
        group a by a.MarcaNome into Marcas
        select new
        {

            products = db.CadastroProduto.Where(x => x.MarcaNome == Marcas.Key),
            Nome = Marcas.Key
        };
    JavaScriptSerializer jss = new JavaScriptSerializer();
    return jss.Serialize(data);
}

Если я запускаю код, результатом является то, что каждая буква в полученной коллекции возвращает опцию в select.

  • 0
    Где определен «Ном» в вашем JavaScript? Вы убедились, что ваш C # возвращает правильный объект? Если вы установите JSFiddle или что-то подобное, вам будет легче помочь / устранить неполадки. редактировать: извините, я вижу "Ном" сейчас - я не прокрутил правильно
Теги:
asp.net-mvc
knockout.js

1 ответ

0

Проблема в том, что... когда я использую эту атрибуцию:

products = [{ "products": [{ "CadastroItemOrcamento": [], "ID": 8, "MarcaNome": "MudarNome", "MarcaEspecificacao": "INOCULANTE", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 9, "MarcaNome": "MudarNome", "MarcaEspecificacao": "STANDAK TOP", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 10, "MarcaNome": "MudarNome", "MarcaEspecificacao": "BROADACRE EXTRA", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 11, "MarcaNome": "MudarNome", "MarcaEspecificacao": "BOOSTER", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 12, "MarcaNome": "MudarNome", "MarcaEspecificacao": "CLORETO DE POTÁSSIO", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 13, "MarcaNome": "MudarNome", "MarcaEspecificacao": "PRIORIXTRA", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 14, "MarcaNome": "MudarNome", "MarcaEspecificacao": "APROUCH PRIMA", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 15, "MarcaNome": "MudarNome", "MarcaEspecificacao": "GLIFOSATO", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 16, "MarcaNome": "MudarNome", "MarcaEspecificacao": "LANNATE BR", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 17, "MarcaNome": "MudarNome", "MarcaEspecificacao": "NOMOLT", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 18, "MarcaNome": "MudarNome", "MarcaEspecificacao": "PREMIO", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 19, "MarcaNome": "MudarNome", "MarcaEspecificacao": "ÓLEO MINERAL (FUNGICIDA)", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 20, "MarcaNome": "MudarNome", "MarcaEspecificacao": "ÓLEO MINERAL (HERBICIDA)", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 21, "MarcaNome": "MudarNome", "MarcaEspecificacao": "ESPALHANTE SILICONADO (TODOS)", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 22, "MarcaNome": "MudarNome", "MarcaEspecificacao": "BROADACRE MN", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 23, "MarcaNome": "MudarNome", "MarcaEspecificacao": "GROWFLOW", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 24, "MarcaNome": "MudarNome", "MarcaEspecificacao": "BORO SUPER", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 25, "MarcaNome": "MudarNome", "MarcaEspecificacao": "REFORCE", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 26, "MarcaNome": "MudarNome", "MarcaEspecificacao": "AGRIK", "MarcaAtiva": true }], "Nome": "MudarNome" }, { "products": [{ "CadastroItemOrcamento": [], "ID": 4, "MarcaNome": "MudarNomeTeste", "MarcaEspecificacao": "SUPERFOSFATO SIMPLES", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 5, "MarcaNome": "MudarNomeTeste", "MarcaEspecificacao": "ROUNDUP", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 6, "MarcaNome": "MudarNomeTeste", "MarcaEspecificacao": "ÓLEO MINERAL", "MarcaAtiva": true }, { "CadastroItemOrcamento": [], "ID": 7, "MarcaNome": "MudarNomeTeste", "MarcaEspecificacao": "SEMENTE DE SOJA", "MarcaAtiva": true }], "Nome": "MudarNomeTeste" }];

Я просто говорю, что переменная продуктов является объектом json, но когда y получает результат api, у меня есть строка.

Решение заключается в анализе JSON в атрибуции следующим образом:

products = JSON.parse(data);

поэтому результат строки будет преобразован в объект Json.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню