none
pasar datos a controlador con ajax RRS feed

  • Pregunta

  • saludos , recurro a su sapiencia, he recorrido esto por varias horas y no encuentro  la solucion:

    tengo el siguiente forms


    @Scripts.Render("~/bundles/jquery")

    <script src="~/Scripts/Artistas/GrabArtist.js"></script>

    <br />

    <div class="container" id="GrabArtis">
        <div class="row">
            <form class="form-inline" id="formCreArtist" action="#">

                <label class="sr-only" for="inlineFormInput">Id Artista</label>

                <input type="text" class="form-control mb-2 mr-sm-2 mb-sm-0" id="idArtis" placeholder="Id Artista" />

                <br />

                <label class="sr-only" for="inlineFormInputGroup">Id Banda</label>

                <input type="text" class="form-control mb-2 mr-sm-2 mb-sm-0" id="idbanda" placeholder="Id Banda" />

                <br />

                <label class="sr-only" for="inlineFormInputGroup">Nombre Artista</label>

                <input type="text" class="form-control mb-2 mr-sm-2 mb-sm-0" id="NomArtist" placeholder="Nombre Artista" />

                <br />


                <input type="submit" class="btn btn-primary" id="btnEnv" value="Add">
            </form>
        </div>
        <br />
    </div>

    y tambien tengo lo siguiente:

    var Datos;
    $(document).ready(function () {
        $("#formCreArtist").submit(function (event) {
            idArt = $("#idArtis").val();
            idBand = $("#idbanda").val();
            nomart = $("#NomArtist").val();
            Datos = { idArt, idBand, nomart };
            event.preventDefault();
            $.ajax({
                type: "POST",
                url: "/Artistas/GrabArtis",
                data: { Datos },
                contentType: "application/text; charset=utf-8",
                dataType: "text",
                success: function (response) {
                    $("#idArtis").val("");
                    $("#idbanda").val("");
                    $("#NomArtist").val("");
                    $('#btnEnv').val('Add'); // se vuelve a recargar el mensaje para agregar nuevo Artista
                    alert('Grabación Exitosa');
                },
                failure: function (response) {
                    alert('Problemas de Grabación');
                },
                error: function (response) {
                    console.log(response.responseText);
                }
            });
        });
     });

    En el controlador , que aun no termino de implementar tengo lo siguiente:

    public ActionResult GrabArtis()
            {
                return View();
            }

            [HttpPost]
            public ActionResult  GrabArtis(String Datos)
            {
                return View();
            }
    esto esta en MVC en visual studio 2015.

    la situación es que los datos pasan al jquery, pero una vez procesados , no pasan al controlador, la llamda al controlador se realiza bien, pues puse un punto de interrupción y llega el flujo, pero lo que no pasan son los "datos".

    tambien intente

            [HttpPost]
            public ActionResult  GrabArtis(Artistas Datos)
            {
                return View();
            }

    (Artistas es el nombre del modelo), pero tampoco llegan los dartos.

    alguien me puede ayudaaaaarrr,

    Gracias.

    jueves, 10 de octubre de 2019 22:11

Respuestas

  • Buena tarde

    Espero te encuentres bien

    Ajusté Content-Type, DataType para enviarlo en forma de JSON. Ajusté la URL para que sirviera en mi controlador, y utilicé JSON.stringify() como se muestra a continuación:

        $(document).ready(function () {
            $("#formCreArtist").submit(function (event) {
                idArt = $("#idArtis").val();
                idBand = $("#idbanda").val();
                nomart = $("#NomArtist").val();
                Datos = { idArt, idBand, nomart };
                event.preventDefault();
                $.ajax({
                    type: "POST",
                    url: "/Home/Test",
                    data: JSON.stringify(Datos),                
                    contentType: "application/json",
                    dataType: "json",
                    success: function (response) {
                        $("#idArtis").val("");
                        $("#idbanda").val("");
                        $("#NomArtist").val("");
                        $('#btnEnv').val('Add'); // se vuelve a recargar el mensaje para agregar nuevo Artista
                        alert('Grabación Exitosa');
                    },
                    failure: function (response) {
                        alert('Problemas de Grabación');
                    },
                    error: function (response) {
                        console.log(response.responseText);
                    }
                });
            });
        });

    Y de lado del controlador realicé el ejemplo así:

    Espero te sea de utilidad

    Saludos


    ING.ARGAMA

    • Marcado como respuesta Rodrigo Menares jueves, 24 de octubre de 2019 18:39
    sábado, 12 de octubre de 2019 2:28

Todas las respuestas

  • Buena tarde

    Espero te encuentres bien

    Ajusté Content-Type, DataType para enviarlo en forma de JSON. Ajusté la URL para que sirviera en mi controlador, y utilicé JSON.stringify() como se muestra a continuación:

        $(document).ready(function () {
            $("#formCreArtist").submit(function (event) {
                idArt = $("#idArtis").val();
                idBand = $("#idbanda").val();
                nomart = $("#NomArtist").val();
                Datos = { idArt, idBand, nomart };
                event.preventDefault();
                $.ajax({
                    type: "POST",
                    url: "/Home/Test",
                    data: JSON.stringify(Datos),                
                    contentType: "application/json",
                    dataType: "json",
                    success: function (response) {
                        $("#idArtis").val("");
                        $("#idbanda").val("");
                        $("#NomArtist").val("");
                        $('#btnEnv').val('Add'); // se vuelve a recargar el mensaje para agregar nuevo Artista
                        alert('Grabación Exitosa');
                    },
                    failure: function (response) {
                        alert('Problemas de Grabación');
                    },
                    error: function (response) {
                        console.log(response.responseText);
                    }
                });
            });
        });

    Y de lado del controlador realicé el ejemplo así:

    Espero te sea de utilidad

    Saludos


    ING.ARGAMA

    • Marcado como respuesta Rodrigo Menares jueves, 24 de octubre de 2019 18:39
    sábado, 12 de octubre de 2019 2:28
  •             contentType: "application/text; charset=utf-8",
    [...]

            public ActionResult  GrabArtis(String Datos)
     tambien intente

            public ActionResult  GrabArtis(Artistas Datos)
      

    Creo que el problema puede estar en el Content-Type. Si no es correcto, el default binder no sabe traducir el cuerpo del Post al tipo del parámetro.

    Para usar tu primera variante, que recibe String Datos, el content-type tendría que ser text/plain. Para el segundo, que recibe Artistas Datos, tendría que ser application/json.

    Por cierto, a no ser que tu clase Artistas sea un objeto que contiene otro objeto que contiene los datos, entonces en tu javascript sobra un nivel de llaves. Si la estructura del json no coincide con la de tu objeto, el deserializador te devuelve null en el parámetro. Puedes comprobar lo que el navegador manda al servidor usando la captura de red de la F12 en el navegador. Cerciórate de que lo que se transmite coincide con la estructura de tu clase.

    sábado, 12 de octubre de 2019 21:15