none
Problema al usar AJAX con Jquery en ASP.NET MVC C# RRS feed

  • Pregunta

  • Hola!

    Tengo un formulario para cambiar la contraseña en web, quiero ejecutar una accion en un controlador que hace dicha tarea de cambiar la contraseña en la base de datos, quise migrar esta accion de un ActionResult a un JsonResult para trabajar con AJAX en Jquery para que si el resultado fue exitoso mostrar un mensaje que se cambio la contraseña correctamente.

    Codigo del controlador:

            [Authorize]
            [HttpPost]
            public JsonResult CambiarContrasena(Seg_UsuariosCambiarPass SU_CP)
            {
                // CLASE QUE TIENE LAS PROPIEDADES DEL JSONRESULT
                var Response = new ResponseModel { Request = true, Redirect = "/", Error = "" };
    
                try
                {
                    if (ModelState.IsValid)
                    {
                        // CAMBIO DE CONTRASEÑA
                       Response.Error = "";
                       Response.Request = true;
                    }
                }
                catch(Exception ex)
                {
                    Response.Error = ex.Message;
                    Response.Request = false;
                }
    
                return Json(Response);
            }

    Codigo de javascript:

    $(document).ready(function () {
    
        $('#btnConfirmar').click(function (e) {
    
            var frm = $('#frmCambiarContrasena');
    
            $.ajax({
                type: "POST",
                url: frm.attr('action'),
                content: "application/json; charset=utf-8",
                dataType: "json",
                data: JSON.stringify(data),
                success: function (d) {
                    if (d.Request == true) {
                        $('#modal').modal('show'); // muestra un mensaje de confirmacion
    
                        window.setTimeout(function () {
                            window.location.href = r.Redirect;
                        }, 3000);
                    }
                    else { 
                        $('#modal').modal('show'); // muestra mensaje de error
                    }
                },
                error: function (xhr, textStatus, errorThrown) {
                    alert('Error!!');
                }
            });
        });
    });

    El problema es que no muestra ningun mensaje y me retorna el JsonResult de forma de vista:

    Hay algo que este haciendo mal?


    Ian Alexandro


    jueves, 12 de abril de 2018 16:31

Respuestas

  • Un par de cosas:

    1. No veo la definición de la variable JS "data" en ninguna parte, pero la usa como fuente de datos para la llamada AJAX.  En fin, si tal vez es porque no lo puso pero está transmitiendo los datos bien, perfecto.   No hablemos más de este punto entonces.
    2. Imagino que el botón cuyo ID es btnConfirmar es un botón dentro del formulario.  Este botón hará el submit() del formulario automáticamente a menos que agregue e.preventDefault() a su código.  Puede ser la primera línea del click.
    3. Ah, y no es necesario cambiar el tipo a JsonResult.  Puede dejarlo como ActionResult.

    Jose R. MCP
    Code Samples



    • Editado webJose jueves, 12 de abril de 2018 16:57
    • Marcado como respuesta Ian Alexandro jueves, 12 de abril de 2018 17:03
    jueves, 12 de abril de 2018 16:55

Todas las respuestas

  • Un par de cosas:

    1. No veo la definición de la variable JS "data" en ninguna parte, pero la usa como fuente de datos para la llamada AJAX.  En fin, si tal vez es porque no lo puso pero está transmitiendo los datos bien, perfecto.   No hablemos más de este punto entonces.
    2. Imagino que el botón cuyo ID es btnConfirmar es un botón dentro del formulario.  Este botón hará el submit() del formulario automáticamente a menos que agregue e.preventDefault() a su código.  Puede ser la primera línea del click.
    3. Ah, y no es necesario cambiar el tipo a JsonResult.  Puede dejarlo como ActionResult.

    Jose R. MCP
    Code Samples



    • Editado webJose jueves, 12 de abril de 2018 16:57
    • Marcado como respuesta Ian Alexandro jueves, 12 de abril de 2018 17:03
    jueves, 12 de abril de 2018 16:55
  • Efectivamente, habia que darle un stop al submit del formulario, gracias Jose!

    Nota: e igual gracias por el comentario del punto 3.


    Ian Alexandro



    jueves, 12 de abril de 2018 17:06