jqGrid потерять данные при отправке - PullRequest
0 голосов
/ 05 февраля 2020

Я работаю над приложением CRUD в ASP. net C #.

Моя проблема заключается в том, что когда я нажимаю кнопку «Отправить» и ModelState.IsValid = false, данные в сетке теряются. Кто-нибудь знает, как это исправить?

У меня есть форма в html и бритва, я не мог оставить всю работу на запрос ajax, так что я сделал, добавив onsubmit событие для формы с функцией «sendContacts», эта функция получает информацию о сетке в виде строки JSON, а затем я назначаю ее в скрытом поле формы, чтобы мой контроллер мог получить всю информацию.

Html

        @using (Html.BeginForm("Nuevo", "Clientes", FormMethod.Post, new { id = "Form", onsubmit = "sendingContactos();", enctype = "multipart/form-data" }))
{

    @Html.Hidden("lista_contactos");

    .... A lot of razor inputs and selects
        <div class="form-group row">
                                                    @Html.LabelFor(p => p.nombre_comercial)
                                                    @Html.TextBoxFor(p => p.nombre_comercial, new { @class = "form-control" })
                                                    @Html.ValidationMessage("nombre_comercial", new { @class = "text-danger" })
                                                </div>

    ... And then jqgrid
    <div class="jqGrid_wrapper p-xs" style="overflow: hidden;">
                                <table id="grid"></table>
                                <div id="cc-footer"></div>
                                <div id="cc-toolbar"></div>
                            </div> }

Javascript

            var lastsel;
        jQuery("#grid").jqGrid({
            caption: " ",
            datatype: "local",
            autowidth: true,
            viewrecords: true,
            rownumbers: true,
            rowNum: 10,
            rowList: [10, 20, 30],
            pager: '#cc-footer',
            colNames: [
                'Nombre',
                'Apellido Paterno',
                'Apellido Materno',
                'Departamento',
            ],
            colModel: [
                { name: 'nombre', editable: true, },
                { name: 'appaterno', editable: true, },
                { name: 'apmaterno', editable: true, },
                {
                    name: 'departamento',
                    index: 'departamento',
                    editable: true,
                    edittype: 'select',
                    editoptions: {
                        size: 1,
                        dataUrl: cl,
                        buildSelect: function (data) {

                            var response = jQuery.parseJSON(data);
                            var s = '<select>';
                            s += '<option></option>';
                            jQuery.each(response, function (i, item) {
                                s += '<option value="' + response[i].cve_departamentos + '">' + response[i].nombre + '</option>';
                            });
                            return s + "</select>";
                            console.log(data);
                        }

                    },
                    editrules: { required: true, edithidden: true },
                    recreateForm: true
                },

            ],
            editurl: "clientArray",

        });

OnSubmit

function sendingContactos() {

var grid = $('#grid').jqGrid('getRowData');   

var clientes_contactos = {
    "clientes_contactos": grid
};

$("#lista_contactos").val(JSON.stringify(clientes_contactos));

}

Контроллер

        [HttpPost]
    public async Task<ActionResult> Nuevo(Clientes cliente, HttpPostedFileBase file)
    {
        List<ClientesContactos> cc = new List<ClientesContactos>();
        var myJObject = JObject.Parse(cliente.lista_contactos);
        cc = JsonConvert.DeserializeObject<List<ClientesContactos>>(myJObject["clientes_contactos"].ToString());
        cliente.clientes_contactos = cc;


        if (!ModelState.IsValid)
        {
            GettingCombos();
            return View(cliente);
        }
        else
        {
            byte[] foto = null;
            if (file != null)
            {
                BinaryReader lector = new BinaryReader(file.InputStream);
                foto = lector.ReadBytes((int)file.ContentLength);
                cliente.cve_logo = foto;
            }

            try
            {
                await ClientHelper.Post("api/Clientes/Add", cliente);
            }
            catch (Exception e)
            {
                ModelState.AddModelError(string.Empty, "Error al insertar registro." + e);
            }

            return RedirectToAction("Index");
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...