提交Asp.Net MVC表单时出错

时间:2012-03-04 00:03:37

标签: asp.net-mvc jqgrid

问题

我正在尝试提交asp.net mvc表单,我收到以下错误。页面最初加载时会成功点击GridData方法。如果我单击下面视图中的“提交”按钮,则会出现以下错误。

错误

参数字典包含方法'System.Web.Mvc.JsonResult GridData(System.String,System.String,Int32,Int32)'的非可空类型'System.Int32'的参数'page'的空条目在'HunterEdge.Web.Controllers.DataController'中。可选参数必须是引用类型,可空类型,或者声明为可选参数。 参数名称:参数

PARTIAL VIEW:这是我试图提交的观看数据

@model HunterEdge.Web.Models.HarvestDataFilter

@using (Html.BeginForm("GridData", "Data"))
{
    <div style=" width:300px; height:550px; float:left">
         html removed for brevity

       <input type="submit" value="Search" style=" margin-left:110px" />
   </div> 
}

控制器操作方法我试图获取表格数据

 public JsonResult GridData(string sidx, string sord, int page, int rows, HarvestDataFilter filter)
    {                        

        var results = (from a in db.t_harvest_statistics_elk
                        where a.year == "2008" && a.unit_number == 1
                        orderby a.id
                        select new { a.id, a.year, a.unit_number, a.total_hunters, a.bulls, a.cows }).ToList(); 

        int pageIndex = Convert.ToInt32(page) - 1;
        int pageSize = rows;
        int totalRecords = results.Count();   
        int totalPages = (int)Math.Ceiling((float)totalRecords / (float)pageSize);

        var pageResults = results.Skip(pageIndex * pageSize).Take(pageSize);           

        var jsonData = new
        {
            total = totalPages,
            page,
            records = totalRecords,
            rows = (
                from pageResult in pageResults
                select new
                {
                    id = pageResult.id,
                    cell = new[] { 
                                    pageResult.year.ToString(),
                                    "Add",
                                    pageResult.unit_number.ToString(),                                         
                                    pageResult.total_hunters.ToString(),
                                    pageResult.bulls.ToString(),
                                    "add",
                                    pageResult.cows.ToString(),
                                    "add",
                                    "add",
                                    "add"

            }
                }).ToArray()
        };
        return Json(jsonData, JsonRequestBehavior.AllowGet); 

1 个答案:

答案 0 :(得分:0)

您应该以其他方式过滤网格数据。使用Html.BeginForm是错误的方法。查看the answer并使用filter toolbaradvanced searching。如果您决定使用自定义<input>字段,则应使用postData并将属性定义为函数(请参阅here)并使用.trigger("reloadGrid", [{page: 1}])将搜索请求发送给控制器。在这种情况下,您应该将postData中与属性名称对应的新参数添加到GridData的参数列表中。