我遇到与此question相同的问题。
我创建了一个应该与WebGrid一起工作的过滤器。过滤器适用于第一页,但如果您尝试转到其他页面或对结果进行排序,则过滤器将丢失。我按照上一个问题中的建议将方法更改为GET,但不是目标更新,而是从页面中消失。
div“Grid”中的网格调用:
var grid = new WebGrid(Model, ajaxUpdateContainerId: "Grid", rowsPerPage: 20);
过滤表单:
@using (Ajax.BeginForm("Action", new { filter = "filter" }, new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "Grid", HttpMethod = "Get" }))
如果在Action中设置了“filter”,我将返回网格的PartialView而不是完整的View。
Firebug告诉我在响应中发送了正确的HTML,但无论出于何种原因,它都没有插入到Grid div中。
任何建议都将不胜感激!
编辑:我目前的解决方法是使用HTML表单而不是AJAX,但如果可能,我想坚持使用AJAX。
答案 0 :(得分:4)
我得到了一个解决这个问题的方法,我的Webgrid周围有一个div:
Index.cshtml:
<div class="grid-container">
<div id="my-grid">
@Html.Partial("_Grid", Model)
</div>
</div>
_Grid.cshtml:
@{
var grid = new WebGrid(null,
canSort: true,
rowsPerPage: 20,
ajaxUpdateContainerId: "my-grid");
grid.Bind(Model.Models, autoSortAndPage: true, rowCount: Model.TotalModelCount);
}
[...]
在我的列表中排序时,在过滤后的结果上,Webgrid消失了,并没有插入到my-grid-div中。但是,当我把周围的“my-grid”放在局部视图中时,它起作用了。我不明白为什么,但它现在有效。
Index.cshtml:
<div class="grid-container">
@Html.Partial("_Grid", Model)
</div>
_Grid.cshtml:
<div id="my-grid">
@{
var grid = new WebGrid(null,
canSort: true,
rowsPerPage: 20,
ajaxUpdateContainerId: "my-grid");
grid.Bind(Model.Models, autoSortAndPage: true, rowCount: Model.TotalModelCount);
}
[...]
</div>