none
ASP.NET CORE MVC con JSON RRS feed

  • Pregunta

  • Buenas, tengo la siguiente duda, tengo una clase Carpeta y otra Estado estas dos tienen una relación de muchos a muchos por lo que se creo una tabla intermedia EstadoCarpetas, lo que necesito hacer es que quiero mover los estados de cada carpeta, se registre los movimientos de cadacarpeta, lo que no puedo hacer es cargar los datos de estados en un <select> solo pude cargar el el ID carpeta a un <input> el detalle es que cuando obtengo desde una funcion JSON solo manda un valor osea a la carpeta lo que quisiera es mandar los estados mas, lo que estube pensando es hacer en dos funciones separadas y solo llamar en una funcion principal pero no logro hacer eso.

    Carpeta

     

    EstadoCarpetas

    Estado

    Lo que necesito esta mostrar en una pantalla modal todos los estados.

    El código que estoy usando en la vista como en el controlador es el siguiente

    <a value="Movimiento" title="Movimiento" class="btn btn-warning" data-target="#myModalEstados" data-toggle="modal" onclick="getDataEstadoAjax('@item.CarpetaId', 'Carpetas/MovimientoEstadoAjax')"><i class="fas fa-people-carry"></i></a>
    <script>
        function getDataEstadoAjax(id, action) {
            $.ajax({
                type: "POST",
                url: action,
                data: { id },
                success: function (response) {
                    let res = document.querySelector('#fEstado');
                    console.log(response);
                    res.innerHTML = '';
                    //console.log(response);
                    for (let item of response) {
                        //console.log(item);
                        res.innerHTML += `
                            <div class="form-group">
                                <label asp-for="${item.idCarpeta}" class="control-label">ID Carpeta</label>
                                <input value="${ item.idCarpeta}" asp-for="${item.idCarpeta}" class="form-control" readonly="readonly" />
                                <span class="text-danger"></span>
                            </div>
                            <div class="form-group">
                                <label class="control-label">Estado Carpeta</label>
                                <select id="EstadoId" class="form-control" data-val-required="Por favor Seleccione un valor." asp-items="ViewBag.EstadoId">
                                    <option value="" hidden disabled selected>--Por favor Seleccione el Estado de la Carpeta--</option>
                                </select>
                                <span class="text-danger"></span>
                            </div>
                        `
                    }
                }
            });
            //getDataEstadosAjax();
        }
    </script>

    <!-- Modal de movimiento de Estados-->
    <div class="modal fade" id="myModalEstados" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
        <div class="modal-dialog" role="document">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title" id="exampleModalLabel">Movimiento de estados</h5>
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                        <span aria-hidden="true">&times;</span>
                    </button>
                </div>
                <div class="modal-body">
                    <div class="box-body">
                        <div class="table table-responsive">
                            <form id="fEstado" asp-action="Index" method="get">
                                <div class="form-group">
                                    <label class="control-label">ID Carpeta</label>
                                    <input class="form-control" />
                                    <span class="text-danger"></span>
                                </div>
    
                                <div class="form-group">
                                    <label class="control-label">Estado Carpeta</label>
                                    <select class="form-control" data-val-required="Por favor Seleccione un valor." asp-items="ViewBag.EstadoId">
                                        <option value="" hidden disabled selected>--Por favor Seleccione el Estado de la Carpeta--</option>
                                    </select>
                                    <span class="text-danger"></span>
                                </div>
                            </form>
                        </div>
                        <!-- /.box-body -->
                    </div>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-danger" data-dismiss="modal">Close</button>
                    <button type="button" class="btn btn-primary">Save changes</button>
                </div>
            </div>
        </div>
    </div>

    public JsonResult MovimientoEstadoAjax(int id)
            {
                var carpeta = _context.Carpetas.Where(c => c.CarpetaId == id);
                ViewData["EstadoId"] = new SelectList(_context.Estados, "EstadoId", "Nombre");
                //list.Insert(0, new Municipio { MunicipioId = 0, Nombre = "Por favor Seleccione el Municipios" });
                return Json(carpeta);
            }
    
            public JsonResult getEstados()
            {
                List<Estado> estados = new List<Estado>();
                estados = _context.Estados.ToList();
                //list.Insert(0, new Municipio { MunicipioId = 0, Nombre = "Por favor Seleccione el Municipios" });
                return Json(new SelectList(estados, "EstadoId", "Nombre"));
            }


    viernes, 21 de diciembre de 2018 13:29

Respuestas

  • hola

    porque en el $.ajax en el success defines el html completo en luegar de solo los options

    Populate (Bind) DropDownList using jQuery AJAX and JSON in ASP.Net MVC

    analiza en el articulo como usa

    success: function (response) {
                        ddlCustomers.empty().append('<option selected="selected" value="0">Please select</option>');
                        $.each(response, function () {
                            ddlCustomers.append($("<option></option>").val(this['Value']).html(this['Text']));
                        });
    
                    },

    solo necesitas eso no todo el html

    ---------

    Cuando desde un action devuelves json

    public JsonResult MovimientoEstadoAjax(int id)

    no sirve de nada esta linea

     ViewData["EstadoId"] = new SelectList(_context.Estados, "EstadoId", "Nombre");

    debrias quitarla

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 21 de diciembre de 2018 14:13