Запрос Ajax не передает измененные строки в параметры JsonResult?

#json #ajax #asp.net-core

#json #ajax #asp.net-core

Вопрос:

Я пытаюсь передавать значения двух элементов через вызов Ajax в мои параметры JsonResult каждый раз, когда меняются значения, но он не принимает новые значения (остается как старые значения).

Мой html и javasript:

 <select class="form-control" id="selspecialist" asp-for="SelSpecialist" asp-items="Model.SpecialistList"></select>
<select class="form-control" id="selreqtype" asp-for="SelReqType" asp-items="Model.ReqTypeList"></select>
  
     $(document).ready(function () {
        $('#mytable').DataTable({
            processing: true,
            serverSide: true,
            ajax: {
                url: "?handler=loadListJson"   "amp;selSpecialist="   document.getElementById("selspecialist").value
                          "amp;selReqType="   document.getElementById("selreqtype").value,
                type: "POST",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                beforeSend: function (xhr) {
                    xhr.setRequestHeader("RequestVerificationToken",
                        $('input:hidden[name="__RequestVerificationToken"]').val());
                },
            },
            columns: [
                { data: "part" },
                { data: "requestTo" },
                { data: "subGroup" },
                { data: "dueDt", type: 'date' },
                { data: "desc" },
                { data: "reason" },
                { data: "reqType" },
                { data: "lastUpdateDt", visible: false },
                {
                    data: null,
                    render: function (data, type, row) {
                        return "<a href='#' class='btn btn-primary btn-xs' onclick=LoadPartUpdate('"   row.part   "'); ><i class='fa fa-edit' aria-hidden='true' style='color:#ffffff; font-size:13px;'></i></a>";
                    }
                }
            ]
        });
        $('#selspecialist').on('change', function () { $('#mytable').DataTable().draw(); });
        $('#selreqtype').on('change', function () { $('#mytable').DataTable().draw(); });
    });
  

Мой метод JsonResult:

 public JsonResult OnPostLoadListJson(string selSpecialist, string selReqType)
        {
            vwOpenRequests = _context.vwOpenRequests.OrderBy(x => x.Sort);
            if (selSpecialist != null) { vwOpenRequests = vwOpenRequests.Where(s => s.RequestTo.Contains(selSpecialist)); }
            if (selReqType != null) { vwOpenRequests = vwOpenRequests.Where(s => s.ReqType.Contains(selReqType)); }
            return new JsonResult(new { data = vwOpenRequests });
        }
  

Комментарии:

1. Привет, вы передаете значения в URL? разве это get не запрос?

2. @Swati верно, но я не смог получить параметр «данные» в ajax для передачи моих значений вообще (они всегда были нулевыми) и обнаружил, что это сработало вместо этого, вот почему.

Ответ №1:

Измените событие onchange, вы должны перезагрузить datatable с новыми параметрами, такими как:

 $('#selspecialist').on('change', function () {
    $('#mytable').DataTable().ajax.url("?handler=loadListJson"   "amp;selSpecialist="   document.getElementById("selspecialist").value
          "amp;selReqType="   document.getElementById("selreqtype").value).load();
});
$('#selreqtype').on('change', function () {
    $('#mytable').DataTable().ajax.url("?handler=loadListJson"   "amp;selSpecialist="   document.getElementById("selspecialist").value
          "amp;selReqType="   document.getElementById("selreqtype").value).load();
});