0

我是 jqGrid 的新手,一直在努力在 MVC3 项目中使用它,但没有成功。我已经下载了演示并浏览了代码,但是在我的项目中实现 jqGrid 失败并出现以下错误。

The parameters dictionary contains a null entry for parameter 'page' of non-nullable type
'System.Int32' for method 'System.Web.Mvc.JsonResult Index(System.String, System.String,
Int32, Int32)' in 'kags.Web.Controllers.DeptController'. An optional parameter must 
be a reference type, a nullable type, or be declared as an optional parameter.
Parameter name: parameters

以下是控制器中的代码:

public JsonResult Index(string sidx, string sord, int page, int rows){
    var ascending = sord.StartsWith("asc") ? true : false;
    int pageIndex = Convert.ToInt32(page) - 1;
    int pageSize = rows;
    int startRow = (pageIndex *  pageSize) + 1;
    var depts = ListAll()
            .Skip(startRow)
            .Take(pageSize).AsQueryable()
            .OrderByField(sidx, ascending);
    int totalRecords = depts.Count();
    int totalPages = (int) Math.Ceiling((float) totalRecords/ (float) pageSize);

    var jsonData = 
              new { total = totalPages,
                    page = page, 
                    records = totalRecords, 
                    rows = (from d in depts
                            select new {
                               i = d.Id,
                               cell = new string[]{d.Name, d.Version.ToString()}
                            })
                            .ToArray()  
                  };
        return Json(jsonData, JsonRequestBehavior.AllowGet);
    }

以下是index.cshtml

<h2>Available Depts</h2>
<div>
    <table id="List" class="scroll" cellpadding="0" cellspacing="0"></table>
    <div id="pager" class="scroll" style="text-align:center;"></div>
</div>

jqGrid 的 css 和脚本文件正在从共享的 _Layout.cshtml 加载,并以正确的顺序排列。

以下支持 jqGrid 的脚本位于单独的脚本文件中

jQuery(document).ready(function () {
        ("#List").jqGrid({
            url: '/Dept/Index/',
            datatype: 'json',
            mtype: 'POST',
            colNames: ['Name'],
            colModel: [{ name: 'Name', index: 'Name', width: 300, align: 'left'}],
            pager: jQuery('#pager'),
            rowNum: 10,
            rowList: [5, 10, 20, 50],
            sortname: 'Id',
            sortOrder: "desc",
            viewrecords: true,
            caption: 'Dept List'
        });
    });

我查看了其他示例,但仍然无法找到出现错误的原因。

如果有人能指出正确的方向来解决错误并设法填充网格,我将不胜感激。

4

2 回答 2

0

嗯,这是一种看待它的方式..通过看到 JtMon 的答案,它看起来很不错,但我想知道你从哪里将页面和行值传递给你的控制器。您也可以使用 JqGrid 在您的视图中实现此分页。但也许这就是你的要求。我建议您从控制器方法中删除您的页面参数并执行类似的操作。

return Json(new
            {

                page = 1, //first page
                other parameters...
            }

然后将以下参数添加到您的网格中。

jsonReader: {
        root: "rows",
        page: "page",
        total: "totalPages",
        records: "totalRecords",
        repeatitems: false,
        id: "id"
        }

让我知道这是否适合您。

于 2012-08-19T15:15:04.013 回答
0

我肯定没有任何接近达林·迪米特洛夫(Darin Dimitrov)的经历,我不知道该评论如何回答我的问题,但我会在黑暗中采取任何方式,并说你应该确保你所在的页码是发送到操作方法或至少是可选的

public JsonResult Index(string sidx, string sord, int page = 1, int rows)
于 2012-08-19T13:58:03.697 回答