Измените postData jqGrid перед вызовом службы WCF с поддержкой AJAX - PullRequest
1 голос
/ 14 июня 2011

У меня есть служба WCF с поддержкой AJAX со следующей подписью:

       [OperationContract]
       [WebGet]
       public JQGridContract GetJQGrid(int entityIndex)

И следующие данные контракта:

[DataContract]
public class JQGridContract
{
    [DataContract]
    public class Row
    {
        [DataMember]
        public int id { get; set; }

        [DataMember]
        public List<string> cell { get; set; }

        public Row()
        {
            cell = new List<string>();
        }
    }

    [DataMember]
    public int page { get; set; }

    [DataMember]
    public int total { get; set; }

    [DataMember]
    public int records { get; set; }

    [DataMember]
    public List<Row> rows { get; set; }

    public JQGridContract()
    {
        rows = new List<Row>();
    }
}  

В основном мне нужно изменить postData клиентской jqGrid для отправки 'entityIndex' этой службе.

Я прочитал, как это должно функционировать и из того, что я могу сказать, это должно работать:

 function loadGrid() {

    $("#jqGrid").jqGrid({

        postData: { entityIndex : function () {    // modify the data posted to AJAX call here

            return 6;   

          })
        },
        gridComplete: function () {

            $("#jqGrid").setGridParam({ datatype: 'local' });
        },
        datatype: function (pdata) {
            getData(pdata);
        },

А вот и функция getData ():

  function getData(pdata) {

    var params = new Object();

    alert(pdata.entityIndex());               // this displays '6', correctly

    params.entityIndex = pdata.entityIndex(); 


    $.ajax(
            {
                type: "GET",
                contentType: "application/json; charset=utf-8",
                url: "AJAXService.svc/GetJQGrid",
                data: JSON.stringify(params),
                dataType: "json",
                success: function (data, textStatus) {
                    if (textStatus == "success") {
                        var thegrid = $("#jqGrid")[0];

                        thegrid.addJSONData(data.d);
                    }
                },
                error: function (data, textStatus) {
                    alert('An error has occured retrieving data!');
                }
            });

Я подтвердил следующее в Firebug:

1) Параметры json верны: {"entityIndex": 6}

2) Служба AJAX возвращает данные JSON в сетку, это просто неправильные данные

А вот странная часть:

Я зарегистрировал 'entityIndex', который на самом деле работает внутри операции WCF - и его ВСЕГДА будет равно 0?

Спасибо.

Ответы [ 2 ]

1 голос
/ 14 июня 2011

Я не буду критиковать стиль вашей программы. Я мог бы написать слишком много вещей об этом. : -)

Ваша текущая основная проблема может быть решена с использованием JSON.stringify(pdata.entityIndex()) вместо JSON.stringify(params) или с использованием другого BodyStyle метода WFC (подробности см. здесь )

0 голосов
/ 14 июня 2011

У меня все работает, это близко к тому, что сказал Олег, просто вам не нужно делать JSON.stringify.

Если у вас есть WebMessageBodyStyle.WrappedRequest, это работает:

data: { entityIndex: pdata.entityIndex() },   

ИЛИ, если у вас нет BodyStyle, это работает:

data: { "entityIndex": pdata.entityIndex() },  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...