Метод действия контроллера только с первого раза.Почему это не получает удар снова? - PullRequest
4 голосов
/ 12 марта 2012

Когда я нажимаю кнопку 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 Ответ

1 голос
/ 12 марта 2012

Элемент управления jqGrid - интересный зверь.

То, что здесь происходит, это то, что ваш первый вызов инициализирует сетку , и, следовательно, при настройке сетки в первый раз инициализируются данные, необходимые для сетки. Эта инициализация вызывает действие контроллера и является причиной, по которой он впервые достигает точки останова.

Для каждого последующего щелчка происходит то, что вы вызываете метод jqGrid (), но поскольку он уже инициализирован, он игнорирует вызов и, следовательно, не устанавливает параметры, которые вы указали.

Вместо этого вам нужно вызвать метод setGridParam, который позволит вам обновить параметры jqGrid следующим образом:

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

после того, как вы изменили параметры сетки, вам нужно запустить обновление следующим образом:

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

Это не самая интуитивно понятная настройка, но именно так работает jqGrid.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...