jquery - 使用 jQuery 和 LINQ-to-Entities 在 ASP.NET MVC 客户端 View 中对 jqGrid 进行排序

标签 jquery asp.net-mvc linq jqgrid

我是一个 jQuery 菜鸟,所以我确信我在这里遗漏了一些简单的东西。

我已经让 jqGrid 与一个操作一起使用,该操作从 LINQ-to-Entities 操作创建 JSON 数据。但是当我单击浏览器中的列标题时,行不会排序。升序/降序指示器显示,但没有其他 react 。

必要的 JavaScript 和 CSS 链接位于母版页标题中:

<script src="/Scripts/jquery-1.3.2.min.js" type="text/javascript"></script>
<!-- CSS and JavaScript files for jqGrid to display on Details pages -->
<link rel="stylesheet" type="text/css" href="/scripts/jQuery/jqGrid-3.4.4/themes/green/grid.css" title="green" media="screen" />
<script src="/Scripts/jQuery/jqGrid-3.4.4/jquery.jqGrid.js" type="text/javascript"></script>
<script src="/Scripts/jQuery/jqGrid-3.4.4/js/jqModal.js" type="text/javascript"></script>
<script src="/Scripts/jQuery/jqGrid-3.4.4/js/jqDnR.js" type="text/javascript"></script>

这是我的初始化代码:

// jqGrid setup.
$("#gridlist").jqGrid({
    url: '/Contact/GridData',
    datatype: 'json',
    mtype: 'GET',
    colNames: ['ID', 'First Name', 'Last Name', 'Organization'],
    colModel: [
        { name: 'id', index: 'id', width: 40, align: 'left', resizable: true },
        { name: 'first_name', index: 'first_name', width: 200, align: 'left', resizable: true, sortable: true, sorttype: "text" },
        { name: 'last_name', index: 'last_name', width: 200, align: 'left', resizable: true, sortable: true, sorttype: "text" },
        { name: 'organization', index: 'organization', width: 300, align: 'left', resizable: true, sortable: true, sorttype: "text"}],
    pager: jQuery('#pager'),
    rowNum: 5,
    rowList: [5, 10, 20, 50],
    repeatitems: false,
    viewrecords: true,
    imgpath: '/scripts/jQuery/jqGrid-3.4.4/themes/green/images',
    caption: 'Contacts'
});                  

这是 HTML:

    <h3>My Grid Data</h3>
    <table id="gridlist" class="scroll" cellpadding="0" cellspacing="0">
    </table>
    <div id="pager" class="scroll" style="text-align:center;">
    </div>

并且,为了完整起见,操作方法:

public ActionResult GridData()
{
    var page = new { page = 1 };

    IEnumerable contacts = _db.ContactSet;
    int i = 0;
    var rows = new object[contacts.Count()];

    foreach (Contact contact in contacts)
    {
        rows[i] = new { id = contact.ID, cell = new[] { contact.ID.ToString(), contact.First_Name, contact.Last_Name, contact.Organization } };
        i++;
    }

    var result = new JsonResult();
    result.Data = new { page = 1, records = 2, rows, total = 1 };

    return result;
}

你知道我在这里缺少什么明显的设置吗?

最佳答案

有两种基本方法可以处理这个问题。网格可以对数据本身进行排序。我不记得如何打开它,因为我从来没有使用过这个选项。通常,我处理的数据集太大而无法返回页面,因此我使用网格的分页功能。这需要在服务器上进行这种排序,因为网格不会看到整个数据集。

要在服务器上进行分页,请将 sidx 和 sord(均为字符串)参数添加到您的操作中。 sidx 将是要排序的列的名称。 sord 将是方向,asc 或 desc。

我有a demo project其中显示了如何执行此操作(使用 LINQ to Objects)。但使用 LINQ to Entities 几乎是相同的;我在生产/非演示代码中使用 LINQ to Entities。下载演示解决方案并自行查找。

关于jquery - 使用 jQuery 和 LINQ-to-Entities 在 ASP.NET MVC 客户端 View 中对 jqGrid 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/927257/

相关文章:

javascript - 如何在jexcel中动态创建空行

javascript - 将两个 json/javascript 数组合并为一个数组

asp.net-mvc - 元素 'title' 出现次数太少,ASP.NET.MVC 母版页中出现 XHTML 验证警告

jquery - 仅在选中时显示复选框

php - XMLHttpRequest 无法加载资源

jQuery 选项卡 - 直接链接到选项卡

asp.net - 为什么 CheckBoxFor 呈现额外的输入标记,以及如何使用 FormCollection 获取值?

c# - 如何筛选具有日期的列表并仅检索 7 天内的数据

c# - 如何在 LINQ 或 EF.Core 中执行此操作?

c# - 使用 linq c# 根据状态对列表进行排序