ASP.NET - Problemas para retonar JSON para usarlo con el plugin DataTable

 
Vista:

Problemas para retonar JSON para usarlo con el plugin DataTable

Publicado por Ezequiel (8 intervenciones) el 24/01/2019 16:40:18
Buen día, mi problema es el siguiente. Quiero usar el plugin DataTable de Jquery para que me arme los filtros, ordenamientos y toda esas funcionalidades para una tabla. Para poder hacerlo necesito pasarle un json (me ha funcionado bien haciendo una llamada a un archivo json, pero quiero que me haga la tabla desde un Web Method).

Aca les dejo el código de mi Web Method

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[System.Web.Services.WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = false)]
public static string RetonarJson()
{
    String json_inicial = "{\"data\":";
 
    List<Product> list = new List<Product>();
 
    for (int i = 0; i < 50; i++)
    {
        Product product = new Product();
        product.Name = "Apple" + i;
        product.Expiry = "30-10-2018" + i;
        product.Price = "30" + i;
        list.Add(product);
    }
 
    String json_final = "}";
    String json = JsonConvert.SerializeObject(list, Formatting.Indented);
    String json_completo = json_inicial + json + json_final;
 
   return json_completo ;
 
}

Ahora cuando hago la llamada JQuery no me sale una respuesta en json, sino en html algo asi como lo siguiente:
1
2
3
"1|#||4|835|updatePanel|MainContent_UpdatePanel1|
            <div class="col-lg-4 col-md-4">
                <span class="form-check-input" style="vertical-align: top"><input id="MainContent_rbNucsPendientes" type="radio" name="ctl00$MainContent$Opciones" value="rbNucsPendientes" onclick="javascript:setTimeout(&#39;__doPostBack(\&#39;ctl00$MainContent$rbNucsPendientes\&#39;,\&#39;\&#39;)&#39;, 0)" /><label for="MainContent_rbNucsPendientes">  NUCs pendientes de auditar</label></span><br />..................."

Mi funcion JQuery es:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$(document).ready(function () {
    $.ajax({
        url: 'Paginacion.aspx/RetornarJson',
        method: "POST",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            var d = JSON.parse(data);
            alert(d);
            $('#example').dataTable({
                data: d,
                paging: true,
                sort: true,
                searching: true,
                scrollY: 200,
                Columns: [
                    { 'data': 'Name' },
                    { 'data': 'Expiry' },
                    { 'data': 'Price' },
                ]
            });
        },
        error: function (xhr, ajaxOptions, thrownError) {
            alert(xhr.responseText);
        }
    });
});

Por ultimo cuando ejecuto con un alert el objeto d, me sale un monton de html y entre todo ese error lo siguiente:
1
2
3
<span><H1>Error de servidor en la aplicación '/'.<hr width=100% size=1 color=silver></H1>
 
<h2><i>M&#233;todo web RetornarJson desconocido.<br>Nombre del par&#225;metro: methodName</i>


Lo que mas me interesa es que pueda devolver bien el json, porque al parecer me esta devolviendo en la respuesta del firebug todo ese codigo html cuando deberia devolver solamente el json

Desde ya muchas gracias por su ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Leonardo Daniel A.
Val: 185
Oro
Ha mantenido su posición en ASP.NET (en relación al último mes)
Gráfica de ASP.NET

Problemas para retonar JSON para usarlo con el plugin DataTable

Publicado por Leonardo Daniel A. (84 intervenciones) el 24/01/2019 19:26:40
Hola y porque no tienes tu funcion como un JsonResult..! te pongo parte del codigo, esta recortado... es lo que uso en MVC

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public JsonResult GetAll()
{
       return json( InventarioLogica.GetAll() );
}
 
// el GetAll
 
public static IEnumerable<Inventario> GetAll()
{
        result = db.Query<Inventario>().Include(x => x.Marca).Include(x => x.PresentacionArticulo)
                                                        .OrderBy(x => x.Nombre).ToList();
 
        return result;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problemas para retonar JSON para usarlo con el plugin DataTable

Publicado por Ezequiel (8 intervenciones) el 24/01/2019 19:45:06
Hola ahi pude resolver lo de traer el json, pues me lo muestra bien en la consola de firefox. Ahora el problema es que me tira el siguiente error:
"DataTables warning: table id=example - Requested unknown parameter '1' for row 0, column 0" y me devuelve filas vacias.

Dejo el codigo jquery aqui:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
function getFiltro3() {
 
    $("#example").dataTable().fnDestroy();
    $(document).ready(function () {
        $.ajax({
            url: 'Paginacion.aspx/RetornarJson',
            method: "POST",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
 
                alert(data.d);
 
 
                $('#example').DataTable({
                    "columnDefs": [
                        {
                            "targets": [0],
                            "data": "Name"
 
                        },
                        {
                            "targets": [1],
                            "data": "Expiry"
 
                        },
                        {
                            "targets": [2],
                            "data": "Price"
                        },
                    ],
                    data: data.d,
                    columns: [
                        { data: 'Name' },
                        { data: 'Expiry' },
                        { data: 'Price' }
                    ]
 
                });
            },
            error: function (xhr, ajaxOptions, thrownError) {
                alert(xhr.responseText);
            }
        });
    });
}


No uso MVC, estoy usando Web Forms.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar