私はjqGridを初めて使用し、MVC3プロジェクト内でjqGridを使用するのに苦労してきましたが、成功しませんでした。デモをダウンロードしてコードを確認しましたが、プロジェクト内に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'
});
});
他のサンプルを見ましたが、それでもエラーが発生する理由を特定できません。
誰かが私を正しい方向に向けてエラーを解決し、グリッドにデータを入力できるようにしていただければ幸いです。