Заполните WebGrid набором данных - PullRequest
0 голосов
/ 29 августа 2018

У меня проблемы с возвратом моего DataSet в мою WebGrid, ранее я заполнял его соединением с моей сущностью, и у меня не было проблем, дело в том, что по соображениям безопасности в своей работе я уже не могу использовать больше, чем соединение " По умолчанию "

перед:

using (SiniestrosEntities dc = new SiniestrosEntities())
{
    var Condicion = dc.CAT_Doctos_Proveedores.OrderBy(a => 
a.id_Proveedor).ToList();

    return Json(new
    {
        data = Condicion
    }, JsonRequestBehavior.AllowGet);
}

Возвращая мои данные в View, у меня не было проблем.

Теперь у меня есть запрос к базе данных в DATSET, и я хочу вернуть его с Json на мой взгляд ... но я получаю следующую ошибку:

Предупреждение DataTables: таблица id = myDatatable - запрошенный неизвестный параметр 'nFacturaProveedoresID' для строки 0, столбца 0. Для получения дополнительной информации об этой ошибке см. http://datatables.net/tn/4

Мой код JS

var oTable = $('#myDatatable').DataTable({
    "ajax": {
        "url": '/Facturas/GetEmployees',
        "type": "get",
        "datatype": "json"
    },
    "columns": [
        { "data": "nFacturaProveedoresID", "autoWidth": true },
        { "data": "nSiniestroid", "autoWidth": true },
        { "data": "cSerie", "autoWidth": true },
        { "data": "cFolio", "autoWidth": true },
        { "data": "dtFechaFactura", "autoWidth": true },
        { "data": "cConcepto", "autoWidth": true },
        { "data": "mTotal", "autoWidth": true },
        { "data": "dtFechaRegistro", "autoWidth": true },
        { "data": "nFacturaProveedoresID", "width": "20px", "render": function (data) {
            return '<a class="popup" href="/Facturas/Save/' + data + '">Editar</a>';
            }
        },
        {
            "data": "EmployeeID", "width": "50px", "render": function (data) 
            {
                return '<a class="popup" href="/Facturas/Delete' + data + '">Borrar</a>';
            }
        }
        ]
    })
    $('.tablecontainer').on('click', 'a.popup', function (e) {
        e.preventDefault();
        OpenPopup($(this).attr('href'));
    })
    function OpenPopup(pageUrl) {
        debugger;
        var $pageContent = $('<div/>');
        $pageContent.load(pageUrl, function () {
            $('#popupForm', $pageContent).removeData('validator');
            $('#popupForm', $pageContent).removeData('unobtrusiveValidation');
            $.validator.unobtrusive.parse('form');

        });

        $dialog = $('<div class="popupWindow" style="overflow:auto"></div>')
                          .html($pageContent)
                          .dialog({
                              draggable: true,
                              autoOpen: false,
                              resizable: true,
                              model: true,
                              title: 'Actualización de Datos',
                              height: 850,
                              width: 1650,
                              close: function () {
                                  $dialog.dialog('destroy').remove();
                              }
                          })
                debugger;
                $('.popupWindow').on('submit', '#popupForm', function (e) {
                    var url = $('#popupForm')[0].action;
                $.ajax({
                    type: "POST",
                    url: url,
                    data: $('#popupForm').serialize(),
                    success: function (data) {
                        if (data.status) {
                            $dialog.dialog('close');
                            oTable.ajax.reload();
                        }
                    }
                })

                e.preventDefault();
            })
            $dialog.dialog('open');
        }
    })

Мой контроллер

public ActionResult GetEmployees()
{
    try
    {
        int proveedor = Convert.ToInt32(Session["IdProveedor"]);

        DataSet ConsultaGrid = new DataSet();
        ConsultasProveedores ConsultaFacturas = new ConsultasProveedores();
        ConsultaGrid = ConsultaFacturas.ConsultaGen(Convert.ToString(proveedor));

        List<string> list = new List<string>();
        list.Add(ConsultaGrid.Tables[0].Rows[0]["nFacturaProveedoresID"].ToString());
        list.Add(ConsultaGrid.Tables[0].Rows[0]["nSiniestroid"].ToString());
        list.Add(ConsultaGrid.Tables[0].Rows[0]["cSerie"].ToString());
        list.Add(ConsultaGrid.Tables[0].Rows[0]["cFolio"].ToString());
        list.Add(ConsultaGrid.Tables[0].Rows[0]["dtFechaFactura"].ToString());
        list.Add(ConsultaGrid.Tables[0].Rows[0]["cConcepto"].ToString());
        list.Add(ConsultaGrid.Tables[0].Rows[0]["mTotal"].ToString());
        list.Add(ConsultaGrid.Tables[0].Rows[0]["dtFechaRegistro"].ToString());

        return Json(new
        {
            data = list
        }, JsonRequestBehavior.AllowGet);
        }
    }
    catch (Exception ex)
    {
        return View("Login");
    }            
}

1 Ответ

0 голосов
/ 29 августа 2018

Вы возвращаете список строк (один элемент на столбец). Datatable будет ожидать, что массив объектов с каждым объектом имеет определенные столбцы:

"columns": [
    { "data": "nFacturaProveedoresID", "autoWidth": true },
    { "data": "nSiniestroid", "autoWidth": true },
    and so on

Ваш контроллер должен вернуть что-то вроде List<Proveedor>, где Proveor это:

public class Proveedor {
    public int nFacturaProveedoresID {get; set; }
    public int nSiniestroid {get; set;}
    etc
}

ваш контроллер должен выглядеть так:

public ActionResult GetEmployees()
{
    try
    {
        int proveedor = Convert.ToInt32(Session["IdProveedor"]);

        DataSet ConsultaGrid = new DataSet();
        ConsultasProveedores ConsultaFacturas = new ConsultasProveedores();
        ConsultaGrid = ConsultaFacturas.ConsultaGen(Convert.ToString(proveedor));

        List<Proveedor> list = new List<Proveedor>();
        list.Add(new Proveedor {
           nFacturaProveedoresID = (int)ConsultaGrid.Tables[0].Rows[0]["nFacturaProveedoresID"],
           nSiniestroid = (int)ConsultaGrid.Tables[0].Rows[0]["nSiniestroid"],
           //rest of fields
        });


        return Json(new
        {
            data = list
        }, JsonRequestBehavior.AllowGet);
        }
    }
    catch (Exception ex)
    {
        return View("Login");
    }            
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...