MVC 4 Jquery DataTable分页丢失了模型参考

时间:2013-05-30 21:23:59

标签: jquery asp.net-mvc-4 datatables

这是我对我的桌子的看法。当我回发给我的控制器时,我的模型会给我ListUsers中的项目并设置“InGroup”= true(如果选中)的属性,以及检查它的UserId。这完全没问题。

          <table id="tblAvailableFranchisees">
                <thead>
                <tr>
                    <th>Franchisee</th>
                    <th>Email Address</th>
                    <th><input type="checkbox" /></th>
                </tr>
                </thead>
                <tbody>
                @for (int i = 0; i < Model.ListUsers.Count; i++)
                {  

                    <tr id="@Model.ListUsers[i].UserId">
                        @Html.HiddenFor(m => m.ListUsers[i].UserId)
                        <td>@Html.DisplayFor(m => m.ListUsers[i].DisplayName)</td>
                        <td>@Html.DisplayFor(m => m.ListUsers[i].EmailAddress)</td>
                        <td>@Html.CheckBoxFor(m => m.ListUsers[i].InGroup)</td>


                    </tr>
                }
                </tbody>
          </table>

现在我已经用它实现了JQuery DataTable。

   $(document).ready(function () {

        var oTable = $('#tblAvailableFranchisees').dataTable();
   {);

DataTable正确呈现,为我提供了对列进行排序,选择页面和选择每页记录数的默认功能。

然后我可以通过复选框和帖子检查用户,传递给我的控制器的模型给了我想要的东西。

然而,当我进入表中的不同页面并发布时,传递给我的控制器的模型现在是一个空集合。我已经确认它与分页有关,但似乎无法弄清楚为什么Model会返回一个null集合而不返回表中的项目。

欢迎任何想法来帮助调查此问题。 提前谢谢

3 个答案:

答案 0 :(得分:3)

我在这里发布这个而不是在评论部分,所以我可以发布一些干净的代码格式,以及对我有用的东西,但如果你重新设计了页面,可能不适合你。

我在提交按钮上修了一下我的问题。

    $('#form').submit(function () {
        oTable.fnFilter("");
        var oSettings = oTable.fnSettings();
        oSettings._iDisplayLength = -1;
        oTable.fnDraw();
    });

这样做可以通过oTable.fnFilter("");将其设置为空,然后将表的显示重置为-1(显示表中的所有行)然后调用fnDraw()来清除搜索过滤器重绘表格的方法(显示所有行)。

通过立即提交整个模型来缓解我所遇到的模型null问题,我的控制器只关心选中复选框的模型。

这种情况在幕后发生,除非您拥有大量数据,否则用户应该更加明智。

答案 1 :(得分:1)

我迟到了这个派对,但万一它可以帮助其他人..... 基本上,我的提交按钮会扩展表格......因此,模型可以完整地执行操作,所有列表项和它们的值都是正确的。

$('#btnSubmit').click(function () {
    expandTable();
});

function expandTable() {
    var oTable = $('#tblCategories').DataTable();
    oTable.page.len(250).draw();
};

答案 2 :(得分:1)

要在AntDC's solution上进行扩展,可以使用以下命令扩展到表中包含的确切行数:

$('#form').submit(function () {
    // force table to display all rows, allowing the entire list to be mapped back to the view model
    var $oTable = $('#tblCategories').DataTable();
    var numRows = $oTable.rows().count(); // get total number rows in table
    $oTable.page.len(numRows).draw();
});