저는 WebApi를 처음 사용하기 때문에 수신 된 게시 매개 변수에 문제가 있습니다. webpi 컨트롤러 메서드에서받은 데이터로 jqgrid를 채우고 싶습니다.WepApi 게시 매개 변수가 null입니다.
buildPostData: function (postData) {
var parameters = {
page: postData.page,
rows: postData.rows,
sidx: '',
sord: '',
_search: false,
searchField: '',
searchString: '',
searchOper: '',
filter: { groupOp: '', rules: [] }
};
$.extend(parameters, postData);
var data = {
parameters: parameters
};
return JSON.stringify(data);
}
bindGridAllData: function() {
var viewModel = this;
jQuery("#AllDataGrid").jqGrid({
url: 'api/DataApi/GetAllData',
datatype: 'json',
mtype: 'POST',
ajaxGridOptions: {
contentType: 'application/json; charset=utf-8'
},
serializeGridData: viewModel.buildPostData,
serializeRowData: function (data) {
return JSON.stringify(data);
},
jsonReader: { repeatitems: false, root: "d.rows", page: "d.page", total: "d.total", records: "d.records" },
colNames: ['DataId', 'Title', 'Description', 'Date', 'UserId', 'Name', 'Surname', 'PicturePath', 'NumberOfComments', ''],
colModel: [
{ name: 'DataId', index: 'DataId', width: 10, hidden: true, editable: false, sortable: false, key: true },
{ name: 'Title', index: 'Title', width: 10, editable: false, align: 'left', sortable: true, hidden: true },
{ name: 'Description', index: 'Description', width: 10, editable: false, align: 'left', sortable: true, hidden: true },
{ name: 'Date', index: 'Date', width: 10, editable: false, align: 'left', sortable: true, hidden: true },
{ name: 'UserId', index: 'UserId', width: 10, editable: false, align: 'left', sortable: true, hidden: true },
{ name: 'Name', index: 'Name', width: 10, editable: false, align: 'left', sortable: true, hidden: true },
{ name: 'Surname', index: 'Surname', width: 10, editable: false, align: 'left', sortable: true, hidden: true },
{ name: 'PicturePath', index: 'PicturePath', width: 10, editable: false, align: 'left', sortable: true, hidden: true },
{ name: 'NumberOfComments', index: 'NumberOfComments', width: 10, editable: false, align: 'left', sortable: true, hidden: true },
{
name: 'DataInformation', index: 'DataInformation', width: 200, editable: false, align: 'left', sortable: true, formatter: function (cellvalue, options, rowObject) {
var template = $('<div data-bind="template: { name: \'DataRecord\', data: DataRecord, ajax: { async: false } }"></div>');
var data = { DataRecord: rowObject };
ko.applyBindings(data, template[0]);
return template.html();
}
}
],
height: '100%',
width: 900,
pager: '#resultGridAllDataPager',
rowNum: 10,
rownumbers: false,
scroll: false,
sortname: 'Date',
sortorder: "asc",
gridview: true,
hoverrows: false,
viewrecords: true,
cmTemplate: { title: false },
loadComplete: function() {
}
});
}
그리고 WebApi 방법이다 : 다음
격자 코드는
[HttpPost]
public JQGridData GetAllData(JQGridSearchParameters parameters)
{
using (dataMKbazaEntities context = new dataMKbazaEntities())
{
JQGridData grid = new JQGridData();
var allData = context.ispolniSITEpodatoci().ToList();
List<object> data = new List<object>();
foreach (var ad in allData)
{
data.Add(new {
DataId=ad.podatokID,
Title=ad.naslov,
Description=ad.opis,
Date=ad.datum,
UserId=ad.idKORISNIK,
Name=ad.ime,
Surname=ad.prezime,
PicturePath=ad.slika,
NumberOfComments=ad.brojKOMENTARI
});
}
grid.rows = data;
grid.page = parameters.page;
grid.records = data.Count;
grid.total = (int)Math.Ceiling((float)data.Count/(float)parameters.rows);
return grid;
}
}
데이터를 전송하는 파라미터 값 buildPostData
방법에서 정의 왔지만 WepApi 제어 방법에서 수신 된 때 널입니다.
나는 webapi 방법에서 [FromBody]
으로 시도했지만 성공하지 못했습니다. HTTP 요청에서 상태 코드는 200 OK
왜 데이터를 가져 오기 위해 'POST'를 사용합니까? GET이 올바른 방법이 아닌가? – vadim
네,하지만 쿼리 문자열에 전송 된 데이터를 원하지 않기 때문에 POST를 사용하고 싶습니다. – user1565840
죄송합니다.하지만 buildPostData 함수를 사용하는 데 아무런 의미가 없습니다. 왜 'parameters'속성을 가진 객체의 내부에있는'GetAllData'에 보낼 모든 매개 변수를 넣어야합니까? 왜'return JSON.stringify (postData); '를 직접 사용하지 않습니까? 당신은'JQGridSearchParameters'에 대한 정의를 포함시키지 않으므로 여러분의 질문에 완전한 대답을 할 수 없습니다. 어떤 식 으로든 [블로그] (http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx)를 읽어 보시고 모델 바인딩 및 포매터의 주요 방법. – Oleg