JqG​​rid格式化程序整数未定义

时间:2015-12-12 08:00:53

标签: asp.net asp.net-mvc jqgrid jqgrid-asp.net jqgrid-formatter

为了达到这个目的,我尝试在网格中填充数据列表,我使用了JqGrid。我已经从nuget manager和online tutorial安装了jqGrid插件,我一直在尝试实现它。

这是我到目前为止所做的: -

  

查看: -

<h2>Search</h2>

<div class="container">
    <div class="row">        
        <table id="tblRecruiterGrid"></table>
        <div id="dvPagination"></div>
    </div>
</div>

<link href="~/Content/jquery-ui.css" rel="stylesheet" />
<link href="~/Content/ui.jqgrid.css" rel="stylesheet" />
<script src="~/Scripts/jquery-grid.locale-en.js"></script>
<script src="~/Scripts/jquery.jqGrid.js"></script>
<script src="~/Scripts/recruiter.js"></script>
  

控制器: -

public ActionResult RecruiterGridData(string sidx = "", string sord = "", int page = 1, int rows = 10)
{
    var vData = recruiterRepo.GetAllByRelation();
    int pageIndex = Convert.ToInt32(page) - 1;
    int pageSize = rows;
    int totalRecords = vData.Count();
    int totalPages = (int)Math.Ceiling((float)totalRecords / (float)pageSize);
    switch (sidx)
    {
        case "RID":
            vData = sord == "desc"
                    ? vData.OrderByDescending(x => x.RecruiterID).ToList()
                    : vData.OrderBy(x => x.RecruiterID).ToList();
                    break;
        default:
            vData = sord == "desc"
                    ? vData.OrderByDescending(x => x.RecruiterID).ToList()
                    : vData.OrderBy(x => x.RecruiterID).ToList();
                    break;
    }
    var vResult = vData.Skip(pageIndex * pageSize).Take(pageSize);

    var jsonData = new
    {
        total = totalPages,
        page = page,
        records = totalRecords,
        rows = vResult.Select(x => new
        {
            RID = x.RecruiterID,
            RecruiterName = x.RecruiterName,
            Email = x.Email,
            CompanyName = x.CompanyName,
            Designation = x.Designation,
            Mobile = x.Mobile
        }).ToList()
    };
    return Json(jsonData, JsonRequestBehavior.AllowGet);
}
  

使用Javascript: -

$(function () {
    $('#tblRecruiterGrid').jqGrid({
        url: "/Recruiter/RecruiterGridData/",
        datatype: 'json',
        mtype: 'get',
        colNames: ['RID', 'Recruiter Name', 'Email', 'Company Name', 'Designation', 'Mobile'],
        colModel: [{ key: true, hidden: true, name: 'RID' },
                    { key: false, hidden: false, name: 'RecruiterName' },
                    { key: false, hidden: false, name: 'Email' },
                    { key: false, hidden: false, name: 'CompanyName' },
                    { key: false, hidden: false, name: 'Designation' },
                    { key: false, hidden: false, name: 'Mobile' }],
        pager: '#dvPagination',
        rowNum: 10,
        rowList: [5, 10, 25, 50, 100],
        sortname: 'RID',
        sortorder: "asc",
        height: 'auto',
        gridview: true,
        autoencode: true,
        viewrecords: true,
        caption: '',
        emptyrecords: 'No records to display',
        jsonReader: { repeatitems: false, id: 'RID' }, 
        autowidth: true,
        multiselect: false,
    });
});

我能够在jqGrid中填充数据但是分页导致了问题。在浏览器开发人员控制台中,我收到一个未定义的错误,因为它没有正确加载分页。我试图在谷歌搜索问题,但每个结果部分指出包括缺少jqGrid文件 grid.locale-en.js 我已经在我的视图中包含一些建议检查是否 {{1} } grid.locale-en.js 之前加载,所以当我在网络中跟踪时,我得到了以下结果。

enter image description here

在做了很多R&amp; D之后我还是无法解决以下错误: -

  

未捕获的TypeError:无法读取属性&#39;整数&#39;未定义的

注意: - Jquery库已在布局头部分中定义。

1 个答案:

答案 0 :(得分:1)

请始终包含您使用的jqGrid的确切版本号,以及有关jqGrid(free jqGridGuriddo jqGrid JS的分叉或版本&lt; = 4.7中的旧jqGrid的信息,其中你用。

我想你使用了一些旧版本的jqGrid,你只是使用了错误的名称来定位locale(本地化)文件。文件名jquery-grid.locale-en.js非常被怀疑。 jqGrid的分布为i18n,文件为grid.locale-en.js。在填充jqGrid的寻呼机期间,使用没有语言环境文件的旧jqGrid会产生错误Cannot read property 'integer' of undefined

代码中的另一个重要错误是使用key: true属性作为一列。该列必须在每一行中都有唯一值。属性key: true通知jqGrid使用列中的包含而不是id属性。您已使用选项jsonReader: { repeatitems: false, id: 'RID' },该选项通知使用item的RID属性作为rowid。我建议您从RID中删除不需要的隐藏colModel列,并从所有其他列中删除key: true, hidden: false。您可以使用默认值删除选项:mtype: 'get'sortorder: "asc"caption: ''multiselect: false

我建议你尝试使用free jqGrid,它是jqGrid的分支,我在Tony Tomov将jqGrid的许可协议更改为{{{{ 3}}(见Guriddo jqGrid JS)。许多新功能,其中 我在the post中描述了在免费jqGrid中实现的内容,并对当前发布的所有版本进行了自述。