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);
    }
}
}

Jqgrid Master Detail不要发送适当的信息

我认为您应该验证您添加到路由表中的routes.MapRoute。你真的使用IdMaster参数还是应该重命名为Id ?您可能只是忘记添加自定义规则。

另一个问题是语法错误:你用了
.navGrid(pager, {...
不是

.navGrid('#pager', {...

(变量pager在undefined中)。

另一个可能的问题是可能的id重复。请确保详细网格的id具有另一个值作为主网格的id。因为id是字符串,所以你可以为id使用前缀:例如'm_'+ch.Id用于主网格,'d_'+bah.Id用于详细网格。

注释:

  • sidxsord不应该包含在服务器的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 })

就是这样,现在一切都很好…!;)

再次感谢阿米尔和奥列格…你救了我的命!!