使用过滤器排序或分页后,MVC3 WebGrid消失

时间:2012-04-20 21:55:50

标签: ajax asp.net-mvc-3 webgrid

我遇到与此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。

1 个答案:

答案 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>