none
enviar datos con ajax a un controlador de .net core 5 RRS feed

  • Pregunta

  • Hola a todos, yo trabajo con mvc y necesito hacer un proyecto en .net core 5 y necesito guardar los datos pero enviándolos por ajax al controlador, tengo el siguiente código que si funciona pero en mvc:

    function Crear() {
        var libroObj = {
            titulo: $('#titulo').val(),
            editoriales_Id: $("#cmbEditoriales option:selected").val(),
            sinopsis: $('#sinopsis').val(),
        };
        $.ajax({
            url: "/Libro/Crear",
            data: JSON.stringify(libroObj),
            type: "POST",
            contentType: "application/json;charset=utf-8",
            dataType: "json",
            success: function (result) {
                alert(result.message);
            },
            error: function (result) {
                alert(result.error);
            }
        });
    }

    //controlador

     public JsonResult Crear(LibroModel libroModel)
            {
                try
                {
                    libroBl.CrearLibro(libroModel);
                    return Json(new { success = true, message = "Guardado Exitoso" });
                }
                catch (Exception ex)
                {
                    return Json(String.Format("'success':'false','error': " + ex + " "));
                }
            }

    y si depuro veo que libroObj si tiene todos los datos en el objeto pero el problema es que no lo está recibiendo el controlador porque llega nulos los datos.

    Cómo lo puedo resolver.

    Gracias.


    yenni



    • Editado yenni martes, 6 de julio de 2021 5:34 ajuste
    martes, 6 de julio de 2021 5:31

Respuestas

  • Sí, el JSON y el modelo concuerdan. En este sentido parece que todo está bien. Pero claro, si no se está disparando el método del controlador, entonces no es de extrañar que no se reciba nada. Esto es un problema distinto, no es el que yo comentaba de que falle el binding y por eso se reciba null.
    • Marcado como respuesta EricRRModerator miércoles, 21 de julio de 2021 14:31
    martes, 6 de julio de 2021 8:38

Todas las respuestas

  •  si depuro veo que libroObj si tiene todos los datos en el objeto pero el problema es que no lo está recibiendo el controlador porque llega nulos los datos.

    Cuando eso sucede, típicamente es porque el formato del objeto que envías no coincide con la estructura de la clase LibroModel, y entonces el deserializador no encuentra coincidencia y lo deja como null.

    Captura con la F12 el JSON que te está enviando el navegador al controlador, y pónnoslo aquí junto con la definición de la clase LibroModel, y así podemos intentar averiguar dónde está la discrepancia.

    martes, 6 de julio de 2021 5:57
  • Hola, probando de nuevo ya no ingresa al método del controlador, no se si debo configurar algo en el startup; yo no había trabajado en .net core con 5.0

    En la consola muestra:

    {titulo: "titulo libro", editoriales_Id: "2", sinopsis: "observaciones"}

    y mi modelo es:


      public class LibroMode

    l
        {

            [Required(ErrorMessage = "La editorial es oblogatoria")]
            [Display(Name = "Editorial")]
            public int editoriales_Id { get; set; }

            [Required(ErrorMessage = "El titulo es oblogatorio")]
            [StringLength(45, ErrorMessage = "El{0} debe ser al menos {2} y mínimo {1} caracteres", MinimumLength = 3)]
            [Display(Name = "Titulo")]
            public string titulo { get; set; }

            [Required(ErrorMessage = "La Sinopsis es oblogatoria")]
            [Display(Name = "Sinopsis")]
            [DataType(DataType.MultilineText)]
            public string sinopsis { get; set; }

        }

    y el botón del cshtml es:

       <button type="submit" id="btnGuardar" value="Crear Libro" class="btn btn-primary">Guardar</button>

    Gracias


    yenni



    • Editado yenni martes, 6 de julio de 2021 6:57 ajuste
    martes, 6 de julio de 2021 6:55
  • Sí, el JSON y el modelo concuerdan. En este sentido parece que todo está bien. Pero claro, si no se está disparando el método del controlador, entonces no es de extrañar que no se reciba nada. Esto es un problema distinto, no es el que yo comentaba de que falle el binding y por eso se reciba null.
    • Marcado como respuesta EricRRModerator miércoles, 21 de julio de 2021 14:31
    martes, 6 de julio de 2021 8:38
  • Hola Yenni,

    Gracias por levantar tu consulta en los foros de MSDN.

    Eric Ruiz

    ____________________________

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN siéntase en la libertad de contactar MSDNFSF@microsoft.com.

    martes, 6 de julio de 2021 14:13
    Moderador