【发布时间】: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.js 在 jquery.jqGrid.js 之前加载,所以当我在网络中追踪时,我得到了以下结果。
经过大量研发后,我仍然无法解决以下错误:-
未捕获的类型错误:无法读取未定义的属性“整数”
注意:- Jquery 库已经在布局头部分定义。
【问题讨论】:
-
您使用哪个版本的 jqGrid? 您使用哪个 jqGrid 分支(free jqGrid、Guriddo jqGrid JS 或版本 colModel 包含一个重要错误:不能将
key: true属性作为一项包含更多。您可以删除所有属性或仅为RID保留它。您可以尝试使用here 或NuGet 描述的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 asp.net-mvc jqgrid jqgrid-asp.net jqgrid-formatter