我一直在阅读有关此问题的各种帖子和文档,并且我已经尝试了所有我读过和能想到的东西 - 仍然很难过。
我正在尝试将 JSON 数据从服务器加载到 Dot Net Nuke 网站中的 jqGrid 中。使用 DNN 不是我的选择,所以没有不使用它的选项。话虽如此,我已经建立了一个标准的 DNN 网站并向其中添加了一个 C# 类库项目(名为 ApiLibrary)。其中有两个类:
RouteMapper.cs
using DotNetNuke.Web.Api;
namespace ApiLibrary
{
public class RouteMapper : IServiceRouteMapper
{
public void RegisterRoutes(IMapRoute mapRouteManager)
{
mapRouteManager.MapHttpRoute("ApiLibrary", "default", "{controller}/{action}", new[] { "ApiLibrary" });
}
}
}
和WelcomeController.cs,其中包含我的 AJAX 函数。我用于 jqGrid 的一个如下:
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
public string GetMyData(string sidx, string sord, int page, int rows)
{
var myList = GetTransportTable(); // returns List<TransportInfo>
var rowlist = new List<Row>() { };
int m = 0;
for (var i = 0; i < myList.Count; i++)
{
m = i + 1;
Row rowobj = new Row();
var stringList = new List<string>();
rowobj.id = m.ToString();
stringList.Add(myList[i].Pilot);
stringList.Add(myList[i].Vessel);
stringList.Add(myList[i].Dock);
stringList.Add(myList[i].Amount.ToString("c"));
rowobj.cell = stringList;
rowlist.Add(rowobj);
}
var jsonToReturn = new
{
total = 3,
page = 1,
records = myList.Count.ToString(),
rows = rowlist.ToArray()
};
string jData = string.Empty;
jData = JsonConvert.SerializeObject(jsonToReturn);
return jData;
}
这将返回 100% 有效的 JSON(在 jslint 上验证),它采用 jqGrid 想要的格式 - 即:
{ “total”:“4”,“page”:“1”,“records”:“4”,“rows”:[ { “id”:“1”,“cell”:[“Myname”,“Myboat ", "Mydock", "144"] }, { "id": "2", "cell":["Myname1", "Myboat1", "Mydock1", "1414"] } ] }
对于 jqGrid 文档中列出的每个事件,如果执行alert()
在该事件期间显示数据,那么它会显示我完美格式化的 JSON。这告诉我 jqGrid 接收数据很好,但是有东西阻止它显示数据。
我尝试过使用 jsonReader、jsonmap 以及我遇到的几乎所有其他建议/选项。
我已经检查并仔细检查了我的 javascript 和 css 引用,这些都很好。这是我用于加载网格的 Javascript:
$("#reviewList").jqGrid({
ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
url: 'DesktopModules/ApiLibrary/API/Welcome/GetMyData',
jsonReader: {
repeatitems: false,
id: "id",
root: "rows",
page: "page",
total: "total",
records: "records",
cell: "cell"
},
colNames: ['Pilot', 'Vessel', 'Dock', 'Amount'],
colModel: [
{ name: 'Pilot', width: 250, align: 'center' },
{ name: 'Vessel', width: 250, align: 'center' },
{ name: 'Dock', width: 175, align: 'center' },
{ name: 'Amount', width: 110, align: 'center' }
],
rowNum: 10,
rowList: [10, 20, 30],
pager: "#pager2",
viewrecords: true,
sortname: 'Pilot',
sortorder: 'asc',
caption: 'Transport List Overview'
}).navGrid("#pager2", { edit: false, add: false, del: false });
值得注意的是,我在同一页面上使用了其他几个带有 jQuery 的 AJAX 调用(GET 和 POST),并且解析任何 JSON 都没有问题。此外,使用该 JSON(来自 jqGrid 之外的 jQuery AJAX 调用),我可以在 jqGrid 中显示它。但是,由于它是本地数据,我无法对其进行排序/分页/搜索 - 这对我没有好处。
出了什么问题?