Возврат данных из WebMethod в ajax - PullRequest
0 голосов
/ 18 сентября 2018

Мне нужно вернуть DataTable в Ajax из c # (WebMethod). Я отправляю «Значение» в WebMethod. Значение принимается и используется в качестве параметра для процедуры в приведенном ниже коде (getObj.getValuesTableAdapter (Value);).

Затем процедура возвращает datatable (dtObj) и ajax должен получить его обратно в части «success». Мне нужна помощь с этим кодом. Я попробовал все, но не получилось.

Я не могу вернуть DataTable напрямую из [WebMethod], как это. Мне нужно преобразовать DataTable в JSON перед отправкой клиенту.

Это мой код c #:

[WebMethod(EnableSession = true)]
public static DataTable GetObject(int Value)
{
    LogicTableAdapters.getValuesTableAdapter getObj = new LogicTableAdapters.getValuesTableAdapter();

    DataTable getObj = getObj.getValuesTableAdapter(Value);
    DataTable dtObj = new DataTable();
    dtObj.Columns.AddRange(new DataColumn[4]{ 
        new DataColumn("ObjectID", typeof(string)), 
        new DataColumn("ObjectName", typeof(string)), 
        new DataColumn("ObjectValue", typeof(string)), 
        new DataColumn("ParentID", typeof(int)),
    });

    foreach (DataRow dr in getObj.Rows)
    {
        dtCh.Rows.Add(dr["ObjectID"].ToString(), dr["ObjectName"] == DBNull.Value ? null : dr["ObjectValue"].ToString(), dr["ParentID"].ToString());
    }
    return dtObj;
}

Это мой Аякс:

$(document).on('click', ".Btn", function () {
    header = $(this).closest('tr').find('.ColumnID').text()
    console.log(Value);   

    $.ajax({
        type: "POST",
        url: "MyAdmin.aspx/GetObject",
        data: JSON.stringify({ 'Value': Value }),
        contentType: "application/json; charset=utf-8",
        dataType: "json",

        success: function () {
           //code that should receive datatable to be displayed
        },

        error: function () {
        }
    });
});

Заранее спасибо!

1 Ответ

0 голосов
/ 18 сентября 2018

попробуйте следующий

создать класс для отправки данных во внешний интерфейс

 public class DataForClientSide
    {
        public string id { get; set; }
        public string name { get; set; }
        public string value{ get; set; }
    }

Отредактируйте свой веб-метод следующим образом

[WebMethod(EnableSession = true)]

    public static DataForClientSide[] GetObject(int Value)
    {
List<DataForClientSide> details = new List<DataForClientSide>();
        LogicTableAdapters.getValuesTableAdapter getObj = new LogicTableAdapters.getValuesTableAdapter();

        DataTable getObj = getObj.getValuesTableAdapter(Value);
        DataTable dtObj = new DataTable();
        dtObj.Columns.AddRange(new DataColumn[4]{ new DataColumn("ObjectID", typeof(string)), new DataColumn("ObjectName", typeof(string)), new DataColumn("ObjectValue", typeof(string)), new DataColumn("ParentID", typeof(int)),       

                    });

        foreach (DataRow dr in getObj.Rows)
        {
                        DataForClientSide Info= new DataForClientSide();
                        Info.id = dr["ObjectID"].ToString();
                        Info.name = dr["ObjectName"].ToString();
                        Info.value = dr["ObjectValue"].ToString();
                        //multiple data as u want. . . . . 
                        details.Add(Info);

        }
        return details.ToArray();
    }

Напишите следующий код в вашей функции ajax, чтобы получить значения

 success: function (data) {
               if(data.d.length>0)
               {
                 $.each(data,function(i,values){
                 //you can get all values as per each iteration as follow
                 //to get id
                 values.id;
                 //to get name
                 values.name;
                 //to get value
                 values.value;
                 });
               }

            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...