0

私は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'
        });
    });

他のサンプルを見ましたが、それでもエラーが発生する理由を特定できません。

誰かが私を正しい方向に向けてエラーを解決し、グリッドにデータを入力できるようにしていただければ幸いです。

4

2 に答える 2

0

ダリン・ディミトロフの経験に近いところは確かではなく、そのコメントが私が尋ねたものに対する答えであったかどうかはわかりませんが、暗闇の中で突き刺し、あなたがいるページ番号が正しいことを確認する必要があると言いますアクションメソッドに送信されるか、少なくともオプションになります

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

さて、これはそれを見る1つの方法です..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 に答える