控制器动作方法仅在第一次获得。它为什么不再被击中?

时间:2012-03-12 02:12:45

标签: asp.net-mvc jqgrid

当我点击FilterButton时,它会在每次点击后每次都会点击警报。但是,动作方法GridData只是第一次被击中。你知道为什么吗?

$(document).ready(function () {

            $('#FilterButton').click(function () {

                alert('button clicked');

                var myGrid = jQuery("#list").jqGrid({
                    url: '/Data/GridData/',
                    datatype: 'json',
                    mtype: 'POST',
                   ......

这是请求的操作方法

 [HttpPost]
    public JsonResult GridData(string sidx, string sord, int page, int rows, string species, string methodOfTake, string outputType, string seasons, string years)
    {          

        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 :(得分:1)

jqGrid控件是一个有趣的野兽。

这里发生的事情是你第一次打电话初始化网格,因此首次设置网格将初始化网格所需的数据。这个初始化调用控制器动作,这是它第一次触及断点的原因。

对于每次后续点击,发生的事情是你正在调用jqGrid()方法,但由于它已经初始化,它忽略了调用,因此没有设置你指定的参数。

你需要做的是调用“setGridParam”方法,它允许你像这样更新jqGrid参数:

jQuery('#list').setGridParam({
                    url: '/Data/GridData/',
                    datatype: 'json',
                    mtype: 'POST',
                    ...
); 

更改网格参数后,需要触发如此刷新:

jQuery('#list').trigger("reloadGrid");  

这不是最直观的设置,但这就是jqGrid的工作原理。