我在这里搜索我的问题并找到一些提示,但无论如何都不起作用,我的问题是:
在jqgrid Javascrip中,我发送setGridParam:{url:'myurl/myfunction/'+ id, page:1, datatype:"json"}
但是,Jgqgrid仍然没有向我的控制器发送用于选择细节的Id,它总是为空....我尝试了各种问题并且问题仍然存在,请帮助我。
这是我的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);
}
}
}
答案 0 :(得分:1)
我认为您应该验证添加到路由表中的routes.MapRoute
。您是否真的使用IdMaster
参数,或者应将其重命名为Id
?可能是您忘记添加自定义规则。
我能看到的另一个问题是语法错误:你使用
.navGrid(pager, {...
而不是
.navGrid('#pager', {...
(未定义变量pager
)。
另一个可能的问题是id重复。确保详细网格的ID具有其他值作为主网格中的ID。因为id是字符串,所以你可以使用id的前缀:例如主网格为'm_'+ch.Id
,详细网格为'd_'+bah.Id
。
更多评论:
sidx
和sord
不应包含在服务器的JSON响应中。应该包括total
而不是datatype: "local"
。有关详细信息,请参阅here。datatype: "json"
代替pager: '#pager'
来获取详细信息网格定义。它将阻止尝试在网格初始化时加载数据。pager: jQuery('#pager')
代替key: true
。'Id'
列中使用Id
。在这种情况下,您不需要两次发送jsonReader: {cell:''}
值。如果您另外使用cell
,则可以从id
数据中删除rows
属性,例如from ch in ms select new { new string[] { ch.Id.ToString(), ch.Descripcion }}).ToList()
属性。因此,您可以使用以下{{1}}。例如,请参阅here或here。答案 1 :(得分:0)
我认为url字符串格式存在问题。它应该像
jQuery(“#DetailList”)。setGridParam({url:“/ Master / DetailGridData / ?id =” + data.Id,page:1,datatype:'json'})< / p>
答案 2 :(得分:0)
我终于找到了解决方案,感谢aamir和Oleg的建议。
我必须做的是以下内容:
首先通过IdMaster更改MasterGrid中的名称Id,因此不会与详细网格的ID混淆,然后通过以下方式更正setGridParam发送的行:
jQuery("#DetailList").setGridParam({ datatype: 'json', url: "/Master/DetailGridData?IdMaster=" + data.IdMaster, page: 1 })
就是这样,现在一切正常...... !! ;)
再次感谢aamir和Oleg ......你救了我的一天...... !!