这是我对我的桌子的看法。当我回发给我的控制器时,我的模型会给我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集合而不返回表中的项目。
欢迎任何想法来帮助调查此问题。 提前谢谢
答案 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();
});