проблема сортировки и подкачки в jqgrid

#jqgrid

#jqgrid

Вопрос:

Я внедряю jqgrid на основе онлайн-примера. Данные поступают, но сортировка / страница не работает, я сузил проблему, которая заключается в следующем: ошибка синтаксического анализа из-за специальных символов (в моем случае ‘(‘ ) в json.responsetext, поэтому я попытался включить jquerySpecialCharHandler.js на моей странице, но это не помогло. Я добавлю сюда свою страницу и действие / функцию моего контроллера.

 jQuery(document).ready(function() {
    jQuery("#list").jqGrid({
        url: '/Home/DynamicGridData/',
        datatype: 'json',
        mtype: 'GET',
        colNames: ['Policy', 'Policy Rule','Alert Status','Alert Code',
                   'Message','Category'],
        colModel: [
            { name: 'Policy', index: 'Policy', sortable: true, sorttype: 'text',
              align: 'left', resizable: true },
            { name: 'Policy Rule', index: 'Policy Rule', sortable: true,
              sorttype: 'text', align: 'left', resizable: true },
            { name: 'Alert Status', index: 'AlertStatus', sortable: true,
              align: 'left', resizable: true },
            { name: 'Alert Code', index: 'AlertCode', sortable: true,
              align: 'left', resizable: true },
            { name: 'Message', index: 'Message', sortable: true,
              align: 'left', resizable: true },
            { name: 'Category', index: 'Category', sortable: true,
              align: 'left', resizable: true}],
        pager: $("#pager"),
        rowNum: 10,
        rowList: [5, 10, 20, 50, 100],
        scroll: true,
        sortname: 'Policy',
        sortorder: 'acs',
        autowidth: true,
        viewrecords: true,
        imgpath: '/scripts/themes/coffee/images',
        caption: 'Nebo System Alerts'
    });
}); 
  

и моя функция :

 public ActionResult DynamicGridData(string sidx, string sord, int page, int rows){
    var context = new AlertsManagementDataContext();
    int pageIndex = Convert.ToInt32(page) - 1;
    int pageSize = rows;
    int totalRecords = context.Alerts.Count();
    int totalPages = (int)Math.Ceiling((float)totalRecords / (float)pageSize);
    IQueryable<Alert> alerts = null;
    try
    {
        alerts =  context.Alerts.
                  OrderBy(sidx   " "   sord).
                  Skip(pageIndex * pageSize).
                  Take(pageSize);
    }catch(ParseException ex){
        Response.Write(ex.Position   ex.Message);
    }
    var jsonData = new {
        total = totalPages,
        page = page,
        records = totalRecords,
        rows = (
            from alert in context.Alerts
            select new {
                id = alert.AlertId,
                cell = new string[] {
                    alert.Policy.Name.ToString(),alert.PolicyRule.ToString(),
                    alert.AlertStatus.Status.ToString(), alert.Code.ToString(),
                    alert.Message.ToString(),alert.Category.Name.ToString()
                }
            }).ToArray()
    };
    return Json(jsonData);
}
  

точное сообщение об ошибке, которое я получаю во время отладки, является:

Первое случайное исключение типа ‘System.Linq.Dynamic.ParseException’ произошло в Dynamic.Ошибка компиляции DLL Microsoft JScript: ожидаемая ‘)’

и разрыв выделяет jquery.jqgrid.js команда, которая является этой :

 addJSONData(eval("(" JSON.responseText ")"),ts.grid.bDiv)
  

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

Комментарии:

1. Какую модель базы данных вы используете: LINQ to SQL или Entity Framework? Если вы используете Entity Framework, вам не нужно использовать System.Linq.Dynamic .

Ответ №1:

Учитывая, System.Linq.Dynamic.ParseException мне кажется, что ошибка заключается в перечислении alerts в вашем коде C #. Попробуйте просмотреть эти результаты — и, в частности, результаты .ToArray() во время отладки. Я сомневаюсь, что это проблема JavaScript.

Комментарии:

1. Спасибо за ваш ответ, у меня в одной из моих колонок (сообщение) открыты и закрыты некоторые фрагменты, после исследования я выяснил, что это специальные символы, которые должны сочетаться с \ в тексте, чтобы считаться частью текста, сталкивались ли вы со специальными символами в json.result, которые вернули datagrid ok, и если да, можете ли вы поделиться этой частью вашего кода здесь, еще раз спасибо

2. @Sue, я не думаю, что это вызовет System.Linq.Dynamic.ParseException . Похоже, что ваши вызовы в System.Linq.Dynamic не используют этот столбец.

3. Я новичок в этом, поэтому простите меня, если это звучит упрощенно! я думал, что столбец сообщения был добавлен в ячейку, где я выбираю все свои столбцы

4. Это добавляется в этом вызове. Но исключение, которое вы получаете, исходит не оттуда. Это происходит от System.Linq.Dynamic.ParseException , как говорится в сообщении. Попробуйте выполнить оценку alerts ранее.

5. что я буду искать в специальном символе перечисления или пропущенном синтаксисе?

Ответ №2:

хорошо, я нашел проблему в context.оповещения в json должны быть предупреждениями, оповещения — это набор данных, на которые влияют сортировка и подкачка, я подумал поместить ответ, чтобы, если кто-то еще столкнется с такой же проблемой, это могло быть полезно для них.