У меня есть служба 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?
Спасибо.