none
Como inserta multiple registros a una tabla detalle con Ajax y asp.net mvc RRS feed

  • Pregunta

  • Hola,

    Soy nuevo en la con ASP.Net MVC, 

    Tengo el siguiente problema; Tengo una tabla llamada tb_ord_solicitud la cual contiene una tabla hija llamada tb_detalle_solicitud,

    En este caso,  cuando se crea una solicitud, no se debe de crear los registros de la tabla hija, hasta despues.  pero a la hora de tratar de insertar el registro de la tabla hija el ajax no de devuevle un error.

    Mi codigo es el siguiente:

    En mi modelo de  tb_ord_solicitud

     public tb_ord_solicitud()
            {
                this.tb_detalle_solicitud = new HashSet<tb_detalle_solicitud>();
                this.tb_orden = new HashSet<tb_orden>();
            }
        
            public int numero_solicitud { get; set; }
            public string cliente_final { get; set; }
            public string id_persona { get; set; }
            public string cod_edificio { get; set; }
            public string local { get; set; }
            public string coordeneadas { get; set; }
            public string cod_fibara { get; set; }
            public string cod_enlace { get; set; }
            public string cod_terminacion { get; set; }
            public string especifique { get; set; }
            public string observaciones { get; set; }
            public string cod_estado_solicitud { get; set; }
            public Nullable<System.DateTime> fecha_solicitud { get; set; }
            public string ruta_archivo { get; set; }
        
            [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
            public virtual ICollection<tb_detalle_solicitud> tb_detalle_solicitud { get; set; }
    
        }
    }

    En mi controlador, aqui trato de insertar el registro de la tabla_odetalle_solicitud medieante la accion de edición de la tabla tb_ord_solicitud

     [HttpPost]
            [ValidateAntiForgeryToken]
            public JsonResult Editar_Solicitud_detalle(tb_ord_solicitud tb_ord_solicitud)
            {
                if (ModelState.IsValid)
                {
                    db.Entry(tb_ord_solicitud).State = EntityState.Modified;
                    db.SaveChanges();
                    return Json(false);
                }
               
                return Json(false);
            }

    Luego en la vista tengo una tabla dinamica donde se ingresan los registro del detalle, esta vista es el detalle de la tb_ord_solicitud mediante el cual obtengo su numero id

    <form class="form-inline">                            
    
    
                                    <table class="table">
                                        <thead>
                                            <tr>
                                                <td>
                                                    <input type="text" id="no_solicitud" value="@Html.DisplayFor(model => model.numero_solicitud)" readonly class="form-control" style="display:none" />
    
                                                </td>
    
                                                <td>
                                                    <div class="form-group" width="30px">
                                                        <label>Servicios</label>
                                                        <select name="select" id="servicio" class="form-control" ">
                                                            <option value="F0500" selected>500m</option>
                                                            <option value="FO1000">1000m</option>
                                                            <option value="FO2000">2000m</option>
                                                            <option value="FO3000">3000m</option>
                                                            <option value="FO4000">4000m</option>
                                                            <option value="FO5000">5000m</option>
                                                            <option value="INS">INSTALACIÓN</option>
                                                            <option value="OC">OBRA CIVIL</option>
                                                            <option value="OT">OTROS</option>
                                                           
                                                        </select>
    
    
                                                        <!--<input type="text" name="text" id="txtservicio" size="10">-->
    
                                                    </div>
    
                                                </td>
    
                                                <td>
    
                                                    <div class="form-group" width="30px">
                                                        <label>Ubicación</label>
                                                        <input type="text" id="ubicacion" class="form-control" />
    
                                                    </div>
                                                </td>
    
                                                <td>
                                                    <div class="form-group" width="20px">
                                                        <label>Precio</label>
                                                        <input type="text" id="precio" class="form-control" width="50" pattern="^\d*(\.\d{0,2})?$" />
                                                    </div>
                                                </td>
    
                                                <td>
                                                    <div class="form-group" width="20px">
                                                        <label>Costo</label>
                                                        <input type="text" id="costo" class="form-control" width="50" pattern="^\d*(\.\d{0,2})?$" />
                                                    </div>
    
                                                </td>
    
                                                <td>
                                                    <div class="form-group" width="50px">
                                                        <label>Comentario</label>
                                                        <input type="text" id="comentario" class="form-control" width="100" />
    
                                                    </div>
                                                </td>
    
                                            </tr>
    
                                        </thead>
                                    </table>
                                    <div class="form-group" width="10%">
                                        <input type="button" id="add" value="agregar" class="btn btn-primary form-control" />
                                    </div>
                                </form>
                                <br />
    
                                <div id="detItems" class="container">
    
                                </div>
    
    
    
                            </div>
    
                        </div>
    
                    </div>
    
                </div>
    
                <div >
                    <div class="col-md-offset-2 col-md-10">
                        <input type="submit" value="Crear" class="btn btn-primary" id="submit" />
                    </div>
                </div>
    

    Y por ultimo los donde quiero realizar el guardado mediante ajax

    function crear_Click() {
        
        var data = {
            numero_solicitud: $('#no_solicitud').val().trim(),
        
    
            tb_detalle_solicitud: detItems.lista
    
        }
    
        var token = $('[name=__RequestVerificationtoken]').val();
    
        $.ajax({
    
            url: '/Solicitud/Editar_Solicitud_detalle',
            type: "POST",
            data: { __RequestVerificationtoken: token, Detalle: data },
            success: function (d) {
    
                if (d == true) {
                    window.location.href = "/tb_ord_solicitud/Index";
                } else {
                    alert('Hubo un error al momento de guardar');
                }
            },
    
            error: function () {
                alert('Error, vuelva a intentarlo');
            }
    
        });
    
    
    }

    Siempre  me devuelve el  mensaje      'Error, vuelva a intentarlo'

    Espero me puedan apoyar, ya que no tengo mas idemas de como registra el detalle de la solicitud


    lunes, 13 de enero de 2020 14:56

Todas las respuestas

  • hola

    >>Siempre  me devuelve el  mensaje      'Error, vuelva a intentarlo'

    eso no es un error, eso es el mensaje de tu defines

    deberias poner un breakpoint o un try..catch en Editar_Solicitud_detalle() para ver cual es el verdadero problema

    En javascript cuando defines

    var data = {
            numero_solicitud: $('#no_solicitud').val().trim(),
        
    
            tb_detalle_solicitud: detItems.lista
    
        }

    de donde sale detItems ?

    porque alli solo veo que es un div vacio y ademas un div no tiene  ningun propiedad "lista" por defecto que se pueda usar

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 13 de enero de 2020 15:24
  • Hola sr. Tuttini,  

    Gracias por responder a mi pregunta, el detItems es una tabla díamica que la genro en otro archivo JS el codigo es el siguiente:

    function MostrarDetalleSolicitud(editar) {
       
        $('#detItems').html('');
        if (detItems.Total() > 0) {
            
    
            var $table = $('<table class="table table-striped table-responsive"/>');
            if (editar)
                $table.append('<thead><tr><th>No. Solicitud</th><th>Servicio</th><th>Ubicación</th><th>Precio</th><th>Costo</th><th>Comentario</th><th>Opciones</th></tr><thead>');
            else
                $table.append('<thead><tr><th>No. Solicitud</th><th>Servicio</th><th>Ubicación</th><th>Precio</th><th>Costo</th><th>Comentario</th></tr><thead>');
            var $tbody = $('<tbody/>');
            for (var i = 0; i < detItems.Total(); i++) {
                var $row = $('<tr/>');
                $row.append($('<td/>').html(detItems.Item(i).numero_solicitud));
                $row.append($('<td/>').html(detItems.Item(i).cod_servicio));
                $row.append($('<td/>').html(detItems.Item(i).ubicacion));
                $row.append($('<td/>').html(detItems.Item(i).precio));
                $row.append($('<td/>').html(detItems.Item(i).costo));
                $row.append($('<td/>').html(detItems.Item(i).comentario));
    
                if (editar)
                    $row.append($('<td/>').html("<a href='#' class='btn btn-primary' data-toggle='tooltip' title='Eliminar' onclick='return EliminarDet(" + i + ");'><span class='glyphicon glyphicon-close' aria-hidden='true'>Eliminar</span></a>"));
                $tbody.append($row);
            }
            $table.append($tbody);
            $('#detItems').html($table);
    
        }
    }
    
    

    lunes, 13 de enero de 2020 19:42
  • hola

    >>el detItems es una tabla díamica que la genro en otro archivo JS

    pero que relacion tiene una tabla html con una lista de datos que deberian ser json ?

    no se envia html como parte de los datos al servidor, deberias tomar esa detItems y convertirlo a json para que mapee con las clases y propiedades que deben recibirlo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 13 de enero de 2020 22:23