Jqgrid Master Detail不要发送适当的信息
本文关键字:信息 Master Detail Jqgrid | 更新日期: 2023-09-27 18:09:58
我在这里搜索我的问题,并找到一些提示,但无论如何都不起作用,我的问题是:
在jqgrid javascript中,我发送setGridParam this: {url:'myurl/myfunction/'+ id, page:1, datatype:"json"}
,但是,Jgqgrid仍然没有发送到我的控制器的Id来选择细节,它总是null.....我试了所有方法,但问题仍然存在,请帮助我。
这是我的Javascript:
<script type="text/javascript">
jQuery(document).ready(function() {
jQuery("#list").jqGrid({
url: '/Master/GridData/',
datatype: 'json',
mtype: 'GET',
colNames: ['Id', 'Descripción'],
colModel: [
{ name: 'Id', index: 'Id', width: 50 },
{ name: 'Descripcion', index: 'Descripcion', width: 80, sortable: true, editable: true, edittype: "text", editoptions: { maxlength: "100"} }
],
pager: jQuery('#pager'),
autowidth: true,
rowList: [5, 10, 20, 50],
sortname: 'Id',
sortorder: "asc",
viewrecords: true,
caption: '<b>Listado de Masters</b>',
onSelectRow: function(ids) {
if (ids != null) {
var data = $("#list").getRowData(ids);
jQuery("#DetailList").setGridParam({ url: "/Master/DetailGridData/" + data.Id, page: 1, datatype: 'json' })
.setCaption("<b>Details of Master : " + data.Descripcion+"</b>")
.trigger('reloadGrid');
}
}
}).navGrid(pager, { edit: false, add: false, del: false, refresh: true, search: false });
jQuery("#DetailList").jqGrid
({
height: 100,
datatype: "json",
colNames: ['Id', 'Descripción', 'Modelo'],
colModel: [
{ name: 'Id', index: 'Id', width: 50 },
{ name: 'Descripcion', index: 'Descripcion', width: 80, sortable: true, editable: true, edittype: "text", editoptions: { maxlength: "100"} },
{ name: 'Modelo', index: 'Modelo', width: 80, sortable: true, editable: true, edittype: "text", editoptions: { maxlength: "100"} }
],
rowNum: 5,
rowList: [5, 10, 20],
pager: jQuery('#DetailPager'),
sortname: 'Id',
viewrecords: true,
sortorder: "desc"
}).navGrid('#DetailPager', { add: false, edit: false, del: false, search: false });
});
</script>
这里是我的控制器代码:
public ActionResult GridData(string sidx, string sord, int? page, int? rows)
{
List<Master> ms = new List<Master>();
ms = MasterRepository.GetAll().ToList<Master>();
int pageIndex = Convert.ToInt32(page) - 1;
int totalrecords = ms.Count();
int totalpages = (int)Math.Ceiling((decimal)totalrecords / (decimal)rows);
var jsonData = new
{
sidx = "Id",
sord = "asc",
page = 1,
records = 25,
rows = (
from ch in ms
select new
{
id = ch.Id,
cell = new string[]
{
ch.Id.ToString(),
ch.Descripcion,
}
}).ToArray(),
};
return Json(jsonData, JsonRequestBehavior.AllowGet);
}
public ActionResult DetailGridData(string IdMaster, string sidx, string sord, int? page, int? rows)
{
int IdCh = Convert.ToInt32(IdMaster);
IList<Detail> det = new List<Detail>();
det = DetailRepository.GetByMaster(IdCh).ToList<Detail>();
int pageIndex = Convert.ToInt32(page) - 1;
int totalrecords = det.Count();
var jsonData = new
{
sidx = "Id",
sord = "asc",
page = 1,
records = 25,
rows = (
from bah in det
select new
{
id = bah.Id,
cell = new string[]
{
bah.Id.ToString(),
bah.Descripcion,
bah.Modelo
}
}).ToArray(),
};
return Json(jsonData, JsonRequestBehavior.AllowGet);
}
}
}
我认为您应该验证您添加到路由表中的routes.MapRoute
。你真的使用IdMaster
参数还是应该重命名为Id
?您可能只是忘记添加自定义规则。
.navGrid(pager, {...
不是.navGrid('#pager', {...
(变量pager
在undefined中)。
另一个可能的问题是可能的id重复。请确保详细网格的id具有另一个值作为主网格的id。因为id是字符串,所以你可以为id使用前缀:例如'm_'+ch.Id
用于主网格,'d_'+bah.Id
用于详细网格。
注释:
-
sidx
和sord
不应该包含在服务器的JSON响应中。取而代之的是total
。更多信息请看这里。 - 我建议您使用
datatype: "local"
而不是datatype: "json"
来定义细节网格。它将防止在网格初始化时加载数据。 - 我建议你使用
pager: '#pager'
而不是pager: jQuery('#pager')
。 - 我建议您在
'Id'
列中使用key: true
。在这种情况下,您不需要发送两次Id
值。如果您要使用额外的jsonReader: {cell:''}
,您可以从rows
数据中删除cell
属性,如id
属性。所以你可以使用下面的from ch in ms select new { new string[] { ch.Id.ToString(), ch.Descripcion }}).ToList()
。请看这里或这里的例子。 - 我建议您在代码的开头对jqGrid使用错误处理。请参阅演示项目的答案的UPDATED部分。显示错误消息可以节省许多调试时间。作为ASP的您可能会对这个演示感兴趣。. NET MVC代码示例,使用jqGrid.
我认为url字符串格式存在问题。应该是
jQuery("# DetailList")。setGridParam({url: "/Master/DetailGridData/?id=" + data。Id, page: 1, datatype: 'json'})
我终于找到了解决方案,感谢amir和Oleg的建议。
我要做的是:
首先通过IdMaster更改MasterGrid中的name Id,这样就不会与Detail Grid的Id混淆,然后更正setGridParam发送的行:
jQuery("#DetailList").setGridParam({ datatype: 'json', url: "/Master/DetailGridData?IdMaster=" + data.IdMaster, page: 1 })
就是这样,现在一切都很好…!;)
再次感谢阿米尔和奥列格…你救了我的命!!