[英]jqGrid does not show rows
我正在尝试在jqGrid(4.3.2)中显示行,但是还没有成功。 我的网络服务响应是:
{"d":
{"__type":"JSONResponse:pe",
"ActionType":null,
"JSONData":"
{\"total\":1,
\"page\":1,
\"records\":5,
\"rows\":[
{\"invid\":1,\"cell\":[{\"invid\":1,\"amount\":500,\"tax\":65,\"total\":565,\"note\":\"myNote 0\"}]},
{\"invid\":2,\"cell\":[{\"invid\":2,\"amount\":510,\"tax\":75,\"total\":585,\"note\":\"myNote 1\"}]},
{\"invid\":3,\"cell\":[{\"invid\":3,\"amount\":520,\"tax\":85,\"total\":605,\"note\":\"myNote 2\"}]},
{\"invid\":4,\"cell\":[{\"invid\":4,\"amount\":530,\"tax\":95,\"total\":625,\"note\":\"myNote 3\"}]},
{\"invid\":5,\"cell\":[{\"invid\":5,\"amount\":540,\"tax\":105,\"total\":645,\"note\":\"myNote 4\"}]}
]
}",
"Status":false
}
} <-(假设上面的代码中使用了花括号)
我的网格配置看起来像这样:
<script type="text/javascript">
$(document).ready(function () {
gridConfig();
});
function gridConfig() {
var request = JSON.stringify(requestData());
var jsonResponse;
$("#list").jqGrid({
url: '/ScriptServices/JsonService.svc/Process',
ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
datatype: 'json',
postData: { request: function () { return request; } },
mtype: 'GET',
colNames: ['Inv No', 'Amount', 'Tax', 'Total', 'Notes'],
colModel: [
{ name: 'invid', index: 'invid', width: 55 },
{ name: 'amount', index: 'amount', width: 80, align: 'right' },
{ name: 'tax', index: 'tax', width: 80, align: 'right' },
{ name: 'total', index: 'total', width: 80, align: 'right' },
{ name: 'note', index: 'note', width: 150, sortable: false }
],
pager: $('#pager'),
rowNum: 10,
rowList: [10, 20, 30],
sortname: 'invid',
sortorder: 'desc',
viewrecords: true,
jsonReader: {
root: "d.JSONData.rows",
page: "d.JSONData.page",
total: "d.JSONData.total",
records: "d.JSONData.records",
cell: "cell",
id:0
},
caption: 'My first grid'
});
};
function requestData() {
var request;
request = {
ActionType: 'GET_GRID_DATA',
RequestJSONData: '{ }'
};
return request;
}
</script>
我找不到问题。 是否需要其他格式? 请帮助..
更新1:
现在,在Oleg建议之后,我的数据以正确的json格式出现,但是由于我的json数据中有__type额外字段,因此无法正确呈现。
修改后的json数据如下:
{
"d":
{"__type":"JSONResponse:pe",
"ActionType":"GRID_RESP",
"JSONData":
{"__type":"JQGridJSONReader:pe",
"total":1,
"page":1,
"records":5,
"rows":[
{"__type":"InvoiceGrid:pe",
"invid":1,
"cell":[{"__type":"JqGridCell:pe","invid":1,"amount":500,"tax":65,"total":565,"note":"myNote 0"}]},
.... and More Rows
]
},
"Status":true
}
} <-(假设上面的代码中使用了花括号)
我已经检查了此链接并实现了默认的构造方法建议,在我的情况下, protected internal
是不可能的。
我的服务配置如下所示:
<system.serviceModel>
<services>
<service name="JsonService" behaviorConfiguration="JsonServiceAspNetAjaxBehavior">
<endpoint address="" behaviorConfiguration="JsonServiceEndPointBehavior"
binding="webHttpBinding" contract="JsonService" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="JsonServiceEndPointBehavior">
<enableWebScript/>
<dataContractSerializer ignoreExtensionDataObject="true" />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="JsonServiceAspNetAjaxBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true" />
</system.serviceModel>
如果将<webHttp/>
应用于endpointBehaviors
,则会收到“ UriTemplate查询值的变量必须具有可通过'QueryStringConverter'转换的类型”错误。
我的WebService看起来像这样:
[ServiceContract(Namespace = "http://www.abhishek.com/portal/json")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class JsonService
{
[OperationContract]
[WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
[GenerateScriptType(typeof(JsonService), ScriptTypeId = "JsonService1")]
public PresentationEntities.JSONResponse Process(PresentationEntities.JSONRequest request)
{
JSONResponse response;
try
{
if (request == null)
{
throw new ArgumentNullException("request", string.Format(ExceptionHelper.ARG_NULL_EXP_MSG, "JSONManager"));
}
else
{
JQGridTransalator gridtransalator = new JQGridTransalator();
response = gridtransalator.JQGridToJSONResponse(); // fill response.JSONData with JQGridJSONReader
}
}
catch (Exception)
{
throw;
}
return response;
}}
JQGridJSONReader看起来像这样:
[DataContract(Name = "JQGridJSONReader", Namespace = "pe")]
public class JQGridJSONReader
{
public JQGridJSONReader()
{
}
[DataMember(Name = "total", Order = 1)]
public int Total { get; set; }
[DataMember(Name = "page", Order = 2)]
public int Page { get; set; }
[DataMember(Name = "records", Order = 3)]
public int Records { get; set; }
[DataMember(Name = "rows", Order = 4)]
public List<InvoiceGrid> Rows { get; set; }
}
任何建议从json数据中删除__type。
更新2:
更新代码,以便我可以更清楚地回答我的问题
[DataContract(Name = "InvoiceGrid", Namespace = "pe")]
public class InvoiceGrid
{
[DataMember(Name = "cell", Order = 2)]
public List<JqGridCell> Cell { get; set; }
}
[DataContract(Name = "JqGridCell", Namespace = "pe")]
public class JqGridCell
{
[DataMember(Name = "invid", Order = 1)]
public int Invid { get; set; }
[DataMember(Name = "invdate", Order = 2)]
public DateTime InvDate { get; set; }
[DataMember(Name = "amount", Order = 3)]
public double Amount { get; set; }
[DataMember(Name = "tax", Order = 4)]
public double Tax { get; set; }
[DataMember(Name = "total", Order = 5)]
public double Total { get; set; }
[DataMember(Name = "note", Order = 6)]
public string Note { get; set; }
}
您的错误是您将对象d.JSONData
数据从对象序列化为JSON 两次 。 可能您手动使用了一些JSON序列化而不是用法对象,并允许.NET序列化数据本身。
怎么可以看到的数据等d.JSONData.rows
无法访问,因为d.JSONData
是字符串 ,而不是对象rows
属性。
已解决的第一个错误:-如@Oleg所建议,我将JSONData(以字符串格式)转换为json对象。 这是由于发送数据之前使用了JSON序列化。
已纠正第二个错误:
我的单元格类型是这样的: List<GridData>
和GridData具有单元格内容(这是复杂类型,即GridData
)。 所以我得到这个
"cell":[{"__type":"JqGridCell:pe","invid":1,"amount":500,"tax":65,"total":565,"note":"myNote 0"}]},
在此单元格中,第一行具有复杂类型。 想象像"cell":[{ComplexType}]
所以我在第一个单元格中得到“ [Object object]”,而其他单元格保持为空。
因此,更正后的单元格类型为List<string>
为其添加了网格数据,然后将单元格添加至List<InvoiceGrid>
。
JQGridJSONReader input = new JQGridJSONReader();
input.Page = 1;
input.Total = 1;
input.Records = 5;
input.Rows = new List<InvoiceGrid>();
for (int i = 0; i < 5; i++)
{
InvoiceGrid invGrid = new InvoiceGrid();
invGrid.Cell = new List<string>();
JqGridCell gridrows = new JqGridCell();
gridrows.Invid = 1 + i;
gridrows.Amount = 500.00 + (i * 10);
gridrows.Tax = 65.00 + (i * 10);
gridrows.Total = gridrows.Amount + gridrows.Tax;
gridrows.Note = "myNote " + i.ToString();
invGrid.Cell.Add(gridrows.Invid.ToString());
invGrid.Cell.Add(gridrows.InvDate.ToString());
invGrid.Cell.Add(gridrows.Amount.ToString());
invGrid.Cell.Add(gridrows.Tax.ToString());
invGrid.Cell.Add(gridrows.Total.ToString());
invGrid.Cell.Add(gridrows.Note.ToString());
input.Rows.Add(invGrid);
}
我以为该错误是因为__type
作为额外的json数据。 但是似乎jqGrid忽略了这一点。
我的json数据现在看起来像这样。 注意:-这次我忽略了invid,但可以将其包括在内。
{"d":
{"__type":"JSONResponse:pe",
"ActionType":"GRID_RESP",
"JSONData":
{"__type":"JQGridJSONReader:pe",
"total":1,
"page":1,
"records":5,
"rows":[
{"__type":"InvoiceGrid:pe",
"cell":["1","500","65","565","myNote 0"]},
{"__type":"InvoiceGrid:pe",
"cell":["2","510","75","585","myNote 1"]},
{"__type":"InvoiceGrid:pe",
"cell":["3","520","85","605","myNote 2"]},
{"__type":"InvoiceGrid:pe",
"cell":["4","530","95","625","myNote 3"]},
{"__type":"InvoiceGrid:pe",
"cell":["5","540","105","645","myNote 4"]}
]
},
"Status":true
}}
非常感谢@Oleg。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.