Фильтр данных с использованием двух раскрывающихся списков - PullRequest
0 голосов
/ 12 апреля 2020

Я создаю одну форму, которая содержит два выпадающих меню, одну таблицу данных и одну кнопку. Кнопка должна фильтровать все данные в datatable, когда пользователь выбирает один из вариантов из выпадающего списка, и результат должен отображаться в DataTable. Я создаю действие в контроллере

public string FiltriranjeIzvjestaja(string tipId, string definicijaId)
        {

            var listaDb = new List<IzvjestajDefinicija>();
            var listaM = new List<IzvjestajElementiVM>();
            var data = _context.IzvjestajDefinicija.Where(x => x.Status == 1).OrderByDescending(x => x.IzvjestajDefinicijaId)
                 .Select(i => new IzvjestajElementiVM()
                 {
                     IzvjestajDefinicijaId = i.IzvjestajDefinicijaId,
                     KratkiNazivDefinicijeI =
                     (_context.IzvjestajDefinicija.Where(x => x.IzvjestajDefinicijaId == i.IzvjestajDefinicijaId && x.Status == 1).FirstOrDefault()).KratkiNaziv,
                     Naziv = i.Naziv,
                     Opis = i.Opis,
                     ShemaXSD = i.IzvjestajXsdshemai.Shema,
                 }).ToList();

            var lista = "";
            lista = JsonConvert.SerializeObject(listaM, Newtonsoft.Json.Formatting.None);
            return lista;
        }

И в моем представлении у меня есть следующее

 $(document).ready(function () {

        $('#tabela').dataTable({
            language: {
                buttons: {
                    copyTitle: 'Uspjeh',
                    copySuccess: {
                        _: '%d redova kopirano',
                        1: '1 red kopiran'
                    }
                },
                processing: "Upit se obrađuje...",
                search: "Pretraga&nbsp;:",
                lengthMenu: "_MENU_ redova",
                info: "Prikazano _START_  do _END_ od ukupno _TOTAL_ redova",
                infoEmpty: "Nema zapisa...",
                infoFiltered: "(filtrirano _MAX_ redova ukupno)",
                infoPostFix: "",
                loadingRecords: "Zapisi se učitavaju...",
                zeroRecords: "U tabeli je nula redova.",
                emptyTable: "Tabela je prazna!",
                   select: {
                    rows: {
                        _: "",
                        0: "",
                        1: ""
                    }
                },
                paginate: {
                    first: "Prvi",
                    previous: "<i class='fas fa-arrow-left'></i>",
                    next: "<i class='fas fa-arrow-right'></i>",
                    last: "Posljednji"
                },
                aria: {
                     sortAscending: ": ",
                    sortDescending: ": "
                }
            },
            ajax: {
                "type": "POST",
                "url": "/DemIzvjestaji/FiltriranjeIzvjestaja",
                "data": function (d) {
                    d.tipId = $("#IzvjestajTipId").val();
                    d.definicijaId = $("#IzvjestajDefinicijaId-izv").val();
                },
                "dataSrc": ""
            },
            order: [[0, 'dsc']],
            data: @Html.Raw(@Model.sve),
            columns: [
                {
                    data: "IzvjestajDefinicijaId",
                    "width": 20,
                    "className": 'dt-body-center'
                },

                { data: "KratkiNazivDefinicijeI" },
                { data: "ShemaXSD" },
                { data: "Naziv" },
                { data: "Opis" },


            ]
        });   //kraj tabele

            var table = $('#tabela').DataTable();

            // Primjeni pretragu samo za odabrane kolone
            table.columns([1, 2, 3]).every(function () {
                var that = this;

                $('input', this.footer()).on('keyup change', function () {
                    if (that.search() !== this.value) {
                        that
                            .search(this.value)
                            .draw();
                    }
                });
            });
     });

Проблема здесь в том, что при любом выборе из выпадающего меню появляется сообщение «Нет данных» Таблица данных. Я пытаюсь выяснить, почему, но я не мог найти решение и причину? Где я ошибся?

ОБНОВЛЕНИЕ

Вот сценарий в реальном времени, что произошло, когда вы выбираете значение из выпадающего меню

enter image description here

И вот что вы получите в результате

enter image description here

1 Ответ

0 голосов
/ 14 апреля 2020

Я нашел, откуда исходит ошибка. В моем Сервисе мне нужно добавить следующие строки кода, начиная с ListDb в ноль и не может получить какие-либо данные в foreach l oop, и мне нужно проверить definicijaId и TipId

if (definicijaId != null && definicijaId != "" && tipId != null && tipId != "")
                defId = Convert.ToInt32(definicijaId);
            if (definicijaId != null && definicijaId != "" && tipId != null && tipId !="")
                listaDb = _context.IzvjestajDefinicija.Where(x => x.IzvjestajDefinicijaId == defId).ToList();
            else
                listaDb = _context.IzvjestajDefinicija.Where(x => x.Status == 1).ToList();
            if (listaDb.Count == 0)
                return "[]";
...