我正在使用 MVC 3 RTM 开发一个 Web 应用程序。在一个视图中,我有一个 WebGrid 可以很好地进行排序和分页。但是,我还需要页面上的一些过滤支持,所以我添加了一个文本框和一个复选框。视图代码如下所示:
@using (Html.BeginForm("Index", "Customer", FormMethod.Get))
{
<fieldset>
<legend>Filter</legend>
<div class="display-label">
Search for</div>
<div class="display-field">@Html.TextBox("filter", null, new { onchange = "$('form').submit()" })</div>
<div class="display-label">
Show inactive customers?
</div>
<div class="display-field">
@Html.CheckBox("showInactive", false, new { onchange = "$('form').submit()" })
</div>
</fieldset>
var grid = new WebGrid(canPage: true, canSort: true, ajaxUpdateContainerId: "grid", rowsPerPage: 10, defaultSort: "Name");
grid.Bind(Model, rowCount: Model.Count, autoSortAndPage: false);
grid.Pager(WebGridPagerModes.All);
@grid.GetHtml(htmlAttributes: new { id = "grid" },
columns: grid.Columns(
grid.Column("Name", "Name"),
grid.Column("Address", "Address"),
grid.Column("IsActive", "Active", (item) => item.IsActive ? "Yes" : "No")));
}
这工作正常,除非我选中复选框。当我第一次加载页面时,未选中该复选框。排序和分页有效,我可以输入一些文本作为过滤器,它过滤我的结果,之后排序和分页仍然有效。但是,如果我选中该复选框,它会更新结果,但排序不再起作用。过滤器仍然有效,所以如果我输入一些文本,它会正确过滤结果并仍然尊重复选框。
我试过在我的控制器中设置一个断点,那里没有问题。当我尝试排序时发送请求,控制器正确返回视图,并将结果作为模型。但 WebGrid 似乎并没有自我更新。
有没有其他人经历过这种情况,或者对寻找什么有什么好的建议?
谢谢!