Saltar al contenido

Enviando el objeto JSON con éxito a ASP.NET WebMethod, usando jQuery

Basta ya de buscar por otras páginas porque llegaste al lugar necesario, poseemos la respuesta que quieres y sin complicaciones.

Solución:

En su ejemplo, debería funcionar si su parámetro de datos es:

data: "'items':" + JSON.stringify(items) + ""

Tenga en cuenta que necesita enviar un JSON string a ASP.NET AJAX. Si especifica un objeto JSON real como parámetro de datos de jQuery, lo serializará como &k=v?k=v pares en su lugar.

Parece que ya lo leyó, pero vuelva a mirar mi ejemplo de uso de un DTO de JavaScript con jQuery, JSON.stringify y ASP.NET AJAX. Cubre todo lo que necesita para que esto funcione.

Nota: nunca debe usar JavaScriptSerializer para deserializar manualmente JSON en un “ScriptService” (como lo sugirió otra persona). Lo hace automáticamente por usted, en función de los tipos especificados de los parámetros de su método. Si te encuentras haciendo eso, lo estás haciendo mal.

Cuando uso AJAX.NET, siempre convierto el parámetro de entrada en un objeto simple y luego uso el deserializador de JavaScript para convertirlo en el tipo que desee. Al menos de esa manera, puede depurar y ver qué tipo de objeto está recibiendo el método web.

Necesitas convertir tu objeto en un string al usar jQuery





    


    

Y el código detrás

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Script.Serialization;
using System.Web.Script.Services;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace CustomEquip

    [ScriptService]
    public partial class WebForm1 : System.Web.UI.Page
    
        protected void Page_Load(object sender, EventArgs e)
        

        
        [WebMethod]
        public static void SubmitItems(object items)
        
            //break point here
            List lstItems = new JavaScriptSerializer().ConvertToType>(items);
        
    


El siguiente es un fragmento de código de nuestro proyecto: tuve problemas para no envolver el objeto como un string y también con valores de fecha; con suerte, esto ayudará a alguien:

        // our JSON data has to be a STRING - need to send a JSON string to ASP.NET AJAX. 
        // if we specify an actual JSON object as jQuery's data parameter, it will serialize it as ?k=v&k=v pairs instead
        // we must also wrap the object we are sending with the name of the parameter on the server side – in this case, "invoiceLine"
        var jsonString = ""invoiceLine":" + JSON.stringify(selectedInvoiceLine) + "";

        // reformat the Date values so they are deserialized properly by ASP.NET JSON Deserializer            
        jsonString = jsonString.replace(//Date((-?[0-9]+))//g, "\/Date($1)\/");

        $.ajax(
            type: "POST",
            url: "InvoiceDetails.aspx/SaveInvoiceLineItem",
            data: jsonString,
            contentType: "application/json; charset=utf-8",
            dataType: "json"
        );

La firma del método del servidor se ve así:

    [WebMethod]
    public static void SaveInvoiceLineItem(InvoiceLineBO invoiceLine)
    {

Acuérdate de que puedes interpretar tu experiencia si diste con la solución.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 4)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Respuestas a preguntas comunes sobre programacion y tecnología