Разбор POCO-списка объектов в javascript с использованием WebMethod - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть вызов get ajax:

function TraerInstructivos() {
    $.ajax({
        type: "GET",
        url: '<%= Page.ResolveUrl("~/Instructivo/Instructivos.aspx") %>' + '/TraerInstructivos',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (response) {

            $.each(result, function (i, item) {
                alert(item.DescripcionVideo);
                alert(item.DireccionVideo);
            });
        },
        error: function (response) {
            alert("Error");
        }
    });
};

Это вызывает следующий webmethod в моем aspx:

[WebMethod]
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
public static List<InstructivoDTO> TraerInstructivos()
{
    try
    {
        return Controles_Instructivo_Instructivos.TraerInstructivos();

    }
    catch (Exception ex)
    {
        throw ex;
    }

}

Это вызывает фрагмент кода в моем ascx:

[WebMethod]
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
public static List<InstructivoDTO> TraerInstructivos()
{
    List<InstructivoDTO> lstResponse = new List<InstructivoDTO>();

    WC.InstructivoDTOResp response = new WC.InstructivoDTOResp() { ListaDeInstructivos = new WC.ListaDeInstructivos() };

    //Traigo los instructivos
    WC.InstructivoDTOReq request = new WC.InstructivoDTOReq()
    {
        TipoOperacion = WC.Accion.Consultar,
        Operacion = Constantes.Consultas.Instructivos.TRAER_INSTRUCTIVOS_WEB_COMERCIO,
        ListaDeInstructivos = new WC.ListaDeInstructivos()
    };

    using (WC.FacturaClient fc = new WC.FacturaClient())
    {
        response = fc.InstructivosEjecutar(request);
    }

    foreach (var i in response.ListaDeInstructivos)
    {
        lstResponse.Add(new InstructivoDTO()
            {
                DescripcionVideo = i.DescripcionVideo,
                DireccionVideo = i.DireccionVideo,
                EsBackOffice = i.EsBackOffice
            });

    }

    return lstResponse;
}

Возвращает список объектов POCO или DTO, действительно простых, у него есть 3 свойства, 2 из которых имеют тип string, а другое - логическое значение.

В функции alert в моем ajaxвызов Я вижу, что я получаю «неопределенный» в результате.

Я что-то упустил?Я попытался stringify, JSON.Parse(response.d), который говорит 'недопустимый символ'.

РЕДАКТИРОВАТЬ:

Благодаря ответу HaukurHaf я изменилсяцикл for внутри моего jquery, кажется, что когда я проводил некоторые тесты, я изменил его, поэтому мой Ajax:

<script type="text/javascript">
    $(document).ready(function () {
        TraerInstructivos();
    });

    function TraerInstructivos() {
        $.ajax({
            type: "GET",
            url: '<%= Page.ResolveUrl("~/Instructivo/Instructivos.aspx") %>' + '/TraerInstructivos',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {

                $.each(response, function (i, item) {
                    alert(item.DescripcionVideo);
                    alert(item.DireccionVideo);
                });
            },
            error: function (response) {
                alert("Error");
            }
        });
    };

</script>

Все еще не определен, это интересная часть, если я поставлю консоль.вместо предупреждения для всего моего объекта я могу увидеть его со значениями, которые я положил в свою таблицу:

enter image description here

1 Ответ

0 голосов
/ 19 февраля 2019

Я нашел ответ.

Кажется, мне не хватало другой половины всего решения.Причина, по которой это не сработало, в том, что я говорю, что я возвращаю объект Json вызову ajax, но вместо этого я возвращаю объекты без их сериализации.Итак, код сейчас выглядит так:

ASPX:

[WebMethod]
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
public static string TraerInstructivos()
{
    try
    {
        List<InstructivoDTO> response = Controles_Instructivo_Instructivos.TraerInstructivos();
        var json = new JavaScriptSerializer().Serialize(response);
        return json;
    }
    catch (Exception ex)
    {
        throw ex;
    }

}

AJAX Call:

function TraerInstructivos() {
    $.ajax({
        type: "GET",
        url: '<%= Page.ResolveUrl("~/Instructivo/Instructivos.aspx") %>' + '/TraerInstructivos',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (response) {
            var res = JSON.parse(response.d);
            $.each(res, function (i, item) {
               alert(item.DescripcionVideo);
            });
        },
        error: function (response) {
            alert("Error");
        }
    });
};
...