我有一个 ASP.NET-MVC 站点,其网页上有 2 个 jqGrid。它们各自列出了自己的“URL”属性,因此它们都调用单独的 ajax 调用。
我想看看是否可以将其合并到一个 json 调用中,该调用同时返回两个网格的 json(而不是 2 个单独的调用)
所以在我的 Controller 中每个方法都用这个代替这个
return Json(new
{
Page = 1,
Records = GetData().Count,
Rows = GetData(),
Total = 1
});
我想看看您是否可以在一次调用中返回两个:
var grid1Data = (new
{
Page = 1,
Records = GetData().Count,
Rows = GetData(),
Total = 1
});
var grid2Data = (new
{
Page = 1,
Records = GetOtherData().Count,
Rows = GetOtherData(),
Total = 1
});
return Json(new
{
Grid1 = grid1Data, Grid2 = grid2Data
});
但我无法弄清楚这在 javascript 端如何工作,因为现在我的代码如下所示(单独的 ajax 调用):
$("#myGrid1").jqGrid({
mtype: "POST",
url: "/GetGrid1Data",
datatype: "json",
$("#myGrid2").jqGrid({
mtype: "POST",
url: "/GetGrid2Data",
datatype: "json",
这可能吗?
最佳答案
乍一看,每个 Ajax 调用填充两个网格看起来很有吸引力。问题是,只有使用 loadonce: true
才能有一些优势。网格中至少有一个选项。仅在您可以进行一次 Ajax 调用并填充另一个网格(其中有 loadonce: true
选项)的情况下。原因很简单。如果您的两个网格都没有 loadonce: true
选项,然后用户可以通过单击列标题对数据进行排序,单击“下一步”页面在一个网格中设置过滤器。在这种情况下,仅需要从服务器重新加载来自网格的数据。我认为在这种情况下加载两个网格的数据没有任何意义。
如果您使用loadonce: true
网格中至少有一个选项,那么您只需更改两个选项 datatype: 'json', loadonce: true
在网格中选择一个选项 datatype: 'local'
。您可以在填充第一个网格时填充网格。您可以设置data
第二个网格的参数并调用 roloadGrid
.
例如,在第一个网格中,您可以使用
jsonReader: {
root: "Grid1.Rows",
page: "Grid1.Page",
total: "Grid1.Total",
records: "Grid1.Records"
}
因此网格将从 Grid1
加载服务器响应的一部分。此外,您还可以看到Grid2
属性(property)在data
loadComplete
的参数或beforeProcessing
回调,设置data
使用setGridParam
的第二个网格的选项然后触发"reloadGrid"
网格上的事件。在这种情况下,应使用 datatype: "local"
创建第二个网格。和选项 mtype
, url
和loadonce
您可以从第二个网格的选项列表中删除。
关于jquery - 是否可以通过单个 ajax 调用一次填充 2 个 jqGrid?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11329196/