none
500 (Internal Server Error) en POST | ASP.NET RRS feed

  • Pregunta

  • Hola expertos!

    Llevo todo el día intentando solucionar el problema y no he dado con la respuesta, solicito de su apoyo y ojalá pueda alguien ayudarme.

    Obtengo el siguiente error: POST http://localhost/PedidosAdmin.aspx/RecibirJSON 500 (Internal Server Error) al intentar enviar la información, éste es el fragmento del código:

                $.ajax({
                    method: "POST",
                    url: "/PedidosAdmin.aspx/RecibirJSON",
                    data: data,
                    //data: {"items":[{"Codigo":"576j5","Descripcion":"Descripcion","Cantidad":"4","Precio":"2","POLine":"POLine","Texto":"Linea de Texto"}]},
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (result) {
                        console.log(result.d);
                    },
                    error: function (err) {
                        console.log(err);
                    }
                });

    Y el WebMethod que trabajará con la información, pero nunca la recibe:

            [WebMethod]
            [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
            public static string RecibirJSON(Cotizacion data)
            {
                return "Haciendo la prueba" + data.ToString();
            }

    Agradezco de antemano cualquier orientación, ejemplo, enlace o video que pudieran facilitarme, estoy desesperado por no encontrar la solución.

    Muchas gracias por su tiempo! Saludos cordiales.

    martes, 25 de julio de 2017 22:24

Respuestas

  • Prueba a enviar el data sin meterlo en items, así:

    [{"Codigo":"46ygh","Descripcion":"Descripcion","Cantidad":"54","Precio":"4","POLine":"POLine","Texto":"Linea de Texto"},{"Codigo":"4h45","Descripcion":"Descripcion","Cantidad":"234","Precio":"6","POLine":"POLine","Texto":"Linea de Texto"}]


    jueves, 27 de julio de 2017 17:18
  • Tienes que seguir enviándolo como json y recogiéndolo en una colección de objetos IEnumerable<Cotizacion>

    El binding lo hará automático.

    Saludos.

    • Marcado como respuesta LuisVillarreal martes, 22 de agosto de 2017 21:03
    martes, 1 de agosto de 2017 6:42

Todas las respuestas

  • Qué estructura tiene tu clase Cotizacion?

    Cómo estás construyendo la variable javascript data?

    Puedes ir probando  data: JSON.stringify(data),

    Saludos.



    miércoles, 26 de julio de 2017 6:05
  • Hola que tal, gracias por tu respuesta, mira la clase Cotizacion está así:

            public class Cotizacion
            {
                public Cotizacion(String Codigo, String Descripcion, int Cantidad, double Precio, String POLine, String Texto)
                {
                    this.Codigo = Codigo;
                    this.Descripcion = Descripcion;
                    this.Cantidad = Cantidad;
                    this.Precio = Precio;
                    this.POLine = POLine;
                    this.Texto = Texto;
                }
                public String Codigo { get; set; }
                public String Descripcion { get; set; }
                public int Cantidad { get; set; }
                public double Precio { get; set; }
                public String POLine { get; set; }
                public String Texto { get; set; }           
            }

    Y ésta es la forma en la que se crea la variable en JS:

        $(document).ready(function () {
            $("#enviar").on('click', function () {
                var items = [];
    
                //Iterar cada fila de la tabla
                $("#mainTable > tbody > tr").each(function () {
    
                    col1_value = $(this).find("#codigoArticulo").val();
                    col2_value = $(this).find("#descripArt").val();
                    col3_value = $(this).find("#cantArticulo").val();
                    col4_value = $(this).find("#precioArt").val();
                    col5_value = $(this).find("#proyecto").val();
                    col6_value = $(this).find("#texto").val();
    
                    var itemOrden = {};
    
                    itemOrden.Codigo = col1_value;
                    itemOrden.Descripcion = col2_value;
                    itemOrden.Cantidad = col3_value;
                    itemOrden.Precio = col4_value;
                    itemOrden.POLine = col5_value;
                    itemOrden.Texto = col6_value;
    
                    items.push(itemOrden);
                });
    
                console.log(items);
    
                var Orden = {};
                Orden.items = items;
                console.log(Orden);
    
                var data = JSON.stringify(Orden);

    Hice el intento con data: data, y como tu me lo recomentaste también, pero sigue marcando error en el POST.

    Agradezco de antemano cualquier apoyo u orientación.


    miércoles, 26 de julio de 2017 13:54
  • Entonces entiendo que en la parte servidor tienes que recoger una lista para el binding

    IEnumerable<Cotizacion>

    También parece que en el [ScriptMethod] te falta especificar el RequestFormat a JSON.

    saludos.



    • Editado Joseba Rguez miércoles, 26 de julio de 2017 20:47
    miércoles, 26 de julio de 2017 20:17
  • Gracias, estuve haciendo más pruebas, y al parecer el problema es el siguiente:

    Message"Type 'Catalogo.PedidosAdmin+Cotizacion' is not supported for deserialization of an array."

    La cadena que se forma es la siguiente:

    {"items":[{"Codigo":"46ygh","Descripcion":"Descripcion","Cantidad":"54","Precio":"4","POLine":"POLine","Texto":"Linea de Texto"},{"Codigo":"4h45","Descripcion":"Descripcion","Cantidad":"234","Precio":"6","POLine":"POLine","Texto":"Linea de Texto"}]}

    Qué pudiera estar mal? ya lo revisé con https://jsonlint.com/ y me la marca como válida.

    Muchas gracias!

    jueves, 27 de julio de 2017 15:27
  • Prueba a enviar el data sin meterlo en items, así:

    [{"Codigo":"46ygh","Descripcion":"Descripcion","Cantidad":"54","Precio":"4","POLine":"POLine","Texto":"Linea de Texto"},{"Codigo":"4h45","Descripcion":"Descripcion","Cantidad":"234","Precio":"6","POLine":"POLine","Texto":"Linea de Texto"}]


    jueves, 27 de julio de 2017 17:18
  • Hola que tal, dando seguimiento a este problema, una disculpa por la demora.

    Pasando solamente la cadena de texto si la manda, el problema es que requiero una colección de objetos debido a que la función siguiente lo que realiza es recorrer las propiedades de cada línea de la tabla (es decir de cada item) para pasarlos como parámetros en otro apartado del programa.

    Tendrán alguna sugerencia para poder solucionar ésto? Gracias de antemano!!

    lunes, 31 de julio de 2017 13:28
  • Tienes que seguir enviándolo como json y recogiéndolo en una colección de objetos IEnumerable<Cotizacion>

    El binding lo hará automático.

    Saludos.

    • Marcado como respuesta LuisVillarreal martes, 22 de agosto de 2017 21:03
    martes, 1 de agosto de 2017 6:42