none
como grabar una tabla por post con asp. net MVC4 framework 4.5 RRS feed

  • Pregunta

  • Holas, tengo una tabla con combobox y radiobutton, y deseo grabarlo todos esos datos al presionar el botón grabar, por favor alguna idea. El detalle de estas tabla es que no pueden escoger el mismo numero al grabar(combobox), y en el checkbox solo pueden seleccionar uno, no mas. Esa validacion se tiene ke ver al grabar , es decir presionar el boton.gracias.

    viernes, 12 de mayo de 2017 18:57

Todas las respuestas

  • hola

    como armas la tabla en la view ? usas algun helper o es solo html

    no evalauste enviar los datos al action que invoca el grabar usando $.ajax y json ? o quieres hacelro con un submit

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 12 de mayo de 2017 19:30
  • Holas Leandro,

    Ahora mi tema es como es como lo envio al controlador y lo guardo.Gracias por tu ayuda.

    asi lo armo:

    <table id="contactosTable" class="table table-bordered table-condensed table-striped">
        <thead>
            <th>id</th>
            <th>titulo_español</th>
            <th>foto</th>
            <th>fecha</th>
            <th>orden</th>
            <th>principal</th>
        </thead>
        <tbody>
            @foreach (var item in Model)
            {
                <tr>
                    <td>@item.id_noticia</td>
                    <td>@item.titulo_espanol</td>
                    <td>@item.foto</td>
                    <td>@item.fecha</td>
                    <td>
                        <select class="form-control">
                            <option value="1">1</option>
                            <option value="2">2</option>
                            <option value="3">3</option>
                            <option value="4">4</option>
                            <option value="5">5</option>
                        </select>
                    </td>
                    <td><input type="radio" name="principal" value="1"></td>
                    <td><button type="button" class="btn btn-danger">Editar</button></td>
                    <td><button type="button" class="btn btn-danger">Eliminar</button></td>
                </tr>
            }
        </tbody>
    </table>


    <script>
        $('#btnGuarda').on('click', function () {
            alert("entre");
            var TableData = new Array();

            $('#contactosTable > tbody > tr').each(function (row, tr) {
                TableData[row] = {
                    "id": $(tr).find('td:eq(0)').text(),
                    "select": $(tr).find('select').val(),
                    "radio": $(tr).find('input:radio[name=principal]:checked').val()
                }
            });

            console.log(TableData);
        });

    </script>

    viernes, 12 de mayo de 2017 19:50
  • hola

    veo que usas jquery, entonces no te animas hacer esto usando ajax ?

     

    ¿Pasando objetos JSON a los Action Methods MVC4?

    la idea es usar $.ajax armando un json que mapee con el parametro del action, podrias enviar una lista de datos si lo necesitas ya que una tabla tiene varios valores

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 12 de mayo de 2017 20:19
  • Hola Leandro, gracias por tu respuesta, lo hize así, y me salio correctamente, dejo el código para compartir el conocimiento:

    Sin embargo tengo una consulta mas, como hago para que una vez ya grabado los select y los radiobutton, me aparezca ya seleccionados, uso RAZOR. Gracias, Leandro.

    vista:

    -----

          
    @model  List<Model.noticia>
    @{
        var controller = HttpContext.Current.Request.RequestContext.RouteData.Values["action"].ToString();
        string variable = HttpContext.Current.Request.Url.AbsoluteUri;
    }
    <button id="btnGuarda" type="button" class="btn btn-danger">Grabar</button>
    
    <table id="contactosTable" class="table table-bordered table-condensed table-striped">
        <thead>
            <th>id</th>
            <th>titulo_español</th>
            <th>foto</th>
            <th>fecha</th>
            <th>orden</th>
            <th>principal</th>
        </thead>
        <tbody>
            @foreach (var item in Model)
            {
                <tr>
                    <td>@item.id_noticia</td>
                    <td>@item.titulo_espanol</td>
                    <td><img id="imgMostrar" alt="" src="~/Uploads/@item.foto" width="90" class="img-responsive" /></td>
    
                    <td>@item.fecha</td>
                    <td>
                        <select class="form-control">
                            <option value="1">1</option>
                            <option value="2">2</option>
                            <option value="3">3</option>
                            <option value="4">4</option>
                            <option value="5">5</option>
                        </select>
                    </td>
                    <td><input type="radio" name="principal" value="1"></td>
                    <td><button type="button" class="btn btn-danger">Editar</button></td>
                    <td><button type="button" class="btn btn-danger">Eliminar</button></td>
                </tr>
            }
        </tbody>
    </table>
    
    
    <script>
        $('#btnGuarda').on('click', function () {
            alert("entre");
            var TableData = new Array();
    
            $('#contactosTable > tbody > tr').each(function (row, tr) {
                TableData[row] = {
                    "id_noticia": $(tr).find('td:eq(0)').text(),
                    "orden": $(tr).find('select').val(),
                    "principal": $(tr).find('input:radio[name=principal]:checked').val()
                }
            });
           // console.log(TableData);
    
            $.ajax({
                contentType: 'application/json',
                type: 'POST',
                url: "/noticia/actualizar",
                dataType: 'json',
                data: JSON.stringify(TableData),
                success: function (result) {
                    alert("entre");
                },
                error: function (jqXHR, textStatus, errorThrown) {
                }
            });
    
        });
    
    </script>
    
    

    controlador:

    ----------

     [AcceptVerbs("Get", "Post")]
            public JsonResult actualizar(List<noticia> viewmodelbacth)
            {
                var seminariolista = new noticia();
                seminariolista = seminariolista.actualizarbatch(viewmodelbacth);
                return Json(seminariolista);
            }
    
    
    
    model:
    
    --------
    
    
            public noticia actualizarbatch(List<noticia> viewmodelbacth)
            {
    
                var noticialista = new noticia();
                try
                {
    
                    using (var ctx = new ProyectoContext())
                    {
                        IQueryable<noticia> query = ctx.noticia.Include(m => m.id_usuario);
                        foreach (noticia noticiaITEM in viewmodelbacth)
                        {
    
                            noticialista = ctx.noticia.Where(x => x.id_noticia == noticiaITEM.id_noticia).SingleOrDefault();
    
                            if (!(noticialista == null))
                            {
                                noticialista.orden = noticiaITEM.orden;
                                noticialista.principal = noticiaITEM.principal;
                            }
    
                        }
    
                        ctx.SaveChanges();
    
                    }
    
                }
                catch (Exception)
                {
    
                    throw;
    
                }
    
                return noticialista;
    
            }
    
    


    -----------------------

    viernes, 12 de mayo de 2017 20:24
  • genial que funcionara

    pero noto algunos puntos raros, porque defines un array si envias de una dato a la vez cuando presionas el boton ? no podrias definir solo una instancia sola de los datos en lugar de un array en json, porque no en realidad que envies una lista

    ademas cuando defines un array deberias usar el push() para agregar items y no el indice con el "now"

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 12 de mayo de 2017 20:44
  • Hola Lenadro, disculpa que no responda a tu pregunta, por favor dejame checkearlo mejor.

    Por favor, podrias responder a mi pregunta, es que tengo que definir esto, para presentarlo, Gracias por tu tiempo.

    "Sin embargo tengo una consulta mas, como hago para que una vez ya grabado los select y los radiobutton, me aparezca ya seleccionados, uso RAZOR. Gracias, Leandro."

    Lo hize asi:

       <select  class="form-control">
                                <option @(item.orden == 1 ? "selected" : "") value="1">1</option>
                                <option @(item.orden == 2 ? "selected" : "") value="2">2</option>
                                <option @(item.orden == 3 ? "selected" : "") value="3">3</option>
                                <option @(item.orden == 4 ? "selected" : "") value="4">4</option>
                                <option @(item.orden == 5 ? "selected" : "") value="5">5</option>                        
                        </select>

    Me funciona y selecciona los datos de la bd, pero deseo seleccionar una orden nuevamente, se queda seleccionado de la bd, y no el actual que estoy seleccionando, gracias por tu ayuda.

    viernes, 12 de mayo de 2017 21:08
  • hola

    >>como hago para que una vez ya grabado los select y los radiobutton, me aparezca ya seleccionados, uso RAZOR

    pero alli no estas usando Razor

    deberias usar $.ajax para invocar un action que retorne un json con los datos que debes cargar en los controles, asignando estos por medio de jquery

    entonces invocas el action, obtiene el json con los datos y lo selecciona, pero para eos tiene que definir un id en el select

    <select id="NombreId" class="form-control">

    para poder asignar el val() que quieres seleccionar

    $("#NombreId").val(...);

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 12 de mayo de 2017 21:42
  • En el futuro se van a crear varios combobox, y cada uno va tener un id diferente?...
    viernes, 12 de mayo de 2017 21:49
  • Holas Lenadro, y como seria sin ajax, decir tan solo por post, no importa si la pagina me refresca, gracias por tu respuesta.
    viernes, 12 de mayo de 2017 23:49