【问题标题】:JqGrid formatter integer undefinedJqG​​rid 格式化程序整数未定义
【发布时间】:2015-12-12 08:00:52
【问题描述】:

为此,我一直在尝试在网格中填充数据列表,我使用了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 我已经在我的视图中包含了一些建议检查是否 grid.locale-en.jsjquery.jqGrid.js 之前加载,所以当我在网络中追踪时,我得到了以下结果。

经过大量研发后,我仍然无法解决以下错误:-

未捕获的类型错误:无法读取未定义的属性“整数”

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

【问题讨论】:

  • 您使用哪个版本的 jqGrid? 您使用哪个 jqGrid 分支(free jqGridGuriddo jqGrid JS 或版本 colModel 包含一个重要错误:不能将key: true 属性作为一项包含更多。您可以删除所有属性或仅为RID 保留它。您可以尝试使用hereNuGet 描述的URL 来释放jqGrid。有用吗?
  • 验证jquery-grid.locale-en.js 确实存在。典型的文件名是i18n/grid.locale-en.js。如果使用免费的 jqGrid fork,您不需要包含英语语言环境文件 (grid.locale-en.js)。无论如何,我建议您使用非最小化版本jquery.jqgrid.js 并在调试器(IE/Chrome 的开发者工具)中启动页面。如果您会收到相同的错误,那么您可以看到发生错误的确切行 jquery.jqgrid.js。行号和 jqGrid 的版本可以帮助理解错误的根源。
  • 感谢您回复@Oleg 并很好地指出错误,我终于解决了。从 nuget 安装 jqGrid 插件时,所有相关包都已正确安装,但我在包中找不到 jquery-grid.locale-en.js 但后来在多语言的子包中找到了一个 jquery-grid.locale-xx.js 被保存。由于找不到丢失的插件,我从 jqGrid 官方网站下载了它并将其包含在我的脚本包中。在这里发布后,我彻底查看了 JS 文件发现了问题。
  • 现在的“jqGrid官网”是什么? 你现在使用的jqGrid哪个版本和哪个fork?我写了关于许可协议和jqGrid名称的变化。由于一年没有更多名为“jqGrid”的产品,因此有两个主要分支:免费 jqGrid(我的分支,最新版本是 4.11.1)和 Guriddo jqGrid JS(最新版本 5.0.1,但来自 旧网站trirand.com/blog/?page_id=6你可以看到Guriddo jqGrid JS 4.8.0 根据Guriddo许可证和价格:见guriddo.net/?page_id=103334)。
  • 再说一句。您使用 ASP.NET MVC。然后下一个版本的 ASP.NET(版本 5)不支持更多用于 client-side 的 NuGet(任何 JavaScript 库,如 jQuery、jqGrid、Angular 等)。 NuGet 将仅用于 服务器端 组件(主要是 C# 组件、DLL)。如果您在代码中包含 JavaScript 组件,则必须使用 npm、bower 和 Grunt 或 Gulp(请参阅 herehere)。 Guriddo 更面向 PHP,我自己使用 ASP.NET 4 和 5 以及 MVC 4 或 6。

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


【解决方案1】:

请始终包含您使用的 jqGrid 的确切版本号,以及有关您使用的 jqGrid 分支(free jqGridGuriddo jqGrid JS 或版本

我想您使用了一些旧版本的 jqGrid,而您只是为语言环境(本地化)文件使用了错误的名称。文件名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' },它通知使用项目的RID 属性作为rowid。我建议您从colModel 中删除不需要的隐藏RID 列,并从所有其他列中删除key: true, hidden: false。您可以删除具有默认值的选项:mtype: 'get'sortorder: "asc"caption: ''multiselect: false

我建议你尝试使用free jqGrid,它是jqGrid 的分支,是我在Tony Tomov 更改jqGrid 的许可协议后开发的,它的名称为Guriddo jqGrid JS(参见the post)。许多新功能,其中 我在免费的 jqGrid 中实现的描述在 the wiki 和当前发布的所有版本的自述文件中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    • 2014-08-27
    相关资源
    最近更新 更多