none
Implementar success en ajax RRS feed

  • Pregunta

  • Hola,

    trabajo con ASP.NET MVC, EF, Bootstrap, jQuery. Tengo un index donde tengo una tabla de la libreria DataTable.net la cual la cargo cuando llamo a la vista index y desde esa vista llamo a una vista parcial como popup.

    Para cargar la tabla en la vista index uso este js

    $(document).ready(function () {
            $('#clientes').DataTable({
                "processing": true,
                "serverSide": true,
                "ajax": {
                    "url": "Cliente/Index",
                    "dataType": "jsonp"
                }
            });
        });

    Controller

    public ActionResult Index()
            {
                List<Cliente> _cliente = clienteService.GetAll().ToList();
                config = new MapperConfiguration(cfg => cfg.CreateMap<Cliente, ClienteViewModel>());
                List<ClienteViewModel> list = config.CreateMapper().Map<List<ClienteViewModel>>(_cliente);
                return View(list);
            }


    Pero desde la vista parcial doy de alta un nuevo registro el cual cuando presione el botón Guardar 

    HTML

    <div class="modal-footer">
                <input class="btn btn-primary" id="btnSave" type="submit" value="Guardar"/>
                <input aria-hidden="true" class="btn btn-md btn-danger" data-dismiss="modal" id="btncancel" type="button" value="Cancelar"/>
            </div>

    Llamara a este js

    script type="text/javascript" language="javascript">
            $(document).ready(function() {
                $('form').submit(function(e) {
                    e.preventDefault();
                    //$('#message').empty();
                    var $form = $(this);
                    if ($form.valid()) {
                        $.ajax({
                            url: this.action,
                            type: this.method,
                            data: $(this).serialize(),
                            dataType: 'json',
                            cache: false,
                            success: function(result) {
                                if (result.success) {
                                    // obtengo el DataTable actual y lo destruyo
                                    var currentTable = $('#clientes').DataTable();
                                    currentTable.destroy();
    
                                    $('#clientes').DataTable({
                                        "processing": true,
                                        "serverSide": true,
                                        "ajax": {
                                            "url": "Cliente/Index",
                                            "dataType": "jsonp"
                                        }
                                    });
                                }
                                error: function(result) {
                                }
                            }
                        });
                    }
                });
            });
        </script>

    El cual llamara a este método de acción

    [HttpPost]
            [ValidateAntiForgeryToken]
            public JsonResult Create(ClienteViewModel entity)
            {
                try
                {
                    if (ModelState.IsValid)
                    {
                        config = new MapperConfiguration(cfg => cfg.CreateMap<ClienteViewModel, Cliente>());
                        var cliente = config.CreateMapper().Map<Cliente>(entity);
                        clienteService.Create(cliente);
                        ModelState.Clear();
                        return Json("{success: 'true'}");
                    }
                    return Json("{success: 'true'}");
                }
                catch (Exception ex)
                {
                    return Json(string.Format("{ success: 'false', message: {0}}", ex.Message));
                }
            }

    En el cual tengo que interpretar el success, algo que no estoy considerando en el js es el id del botón "btnSave" creo eso se me esta escapando.

    La idea es que cuando precione Guardar valla al controller y si guardo el registro recargue la tabla solo la tabla mas no la pagina, con el nuevo registro que se dio de alta.

    POPOU

    Table

    Debería haber un solo método que cargue la tabla? Ya que el popup es un html que se le inyecta al index debería poder usar los js que esten en el index, eso creo por teoría. 


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú


    jueves, 23 de marzo de 2017 0:27