MVC3 WebGrid исчезает после сортировки или подкачки с помощью фильтра

У меня та же проблема, что и у этого вопроса.

Я создал фильтр, который должен работать вместе с WebGrid. Фильтр работает для первой страницы, но если вы попытаетесь перейти на другую страницу или отсортировать результаты, фильтр будет потерян. Я последовал предложению в предыдущем вопросе изменить метод на GET, но вместо обновления цели он исчезает со страницы.

Сетка, вызов внутри div "Сетка":

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" }))

Если в действии установлен "фильтр", я возвращаю PartialView сетки вместо полного View.

Firebug показывает мне, что в ответ отправляется правильный HTML, но по какой-то причине он не вставляется в блок Grid.

Мы ценим любые предложения!

Изменить: мой текущий способ обхода заключается в использовании формы HTML вместо AJAX, но я хотел бы придерживаться AJAX, если это возможно.

1 ответ

Я получил решение этой проблемы, где у меня был div, окружающий мою Webgrid, вот так:

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);
}
[...]

При сортировке в моем списке по отфильтрованным результатам веб-сетка исчезла и не была вставлена ​​в my-grid-div. ОДНАКО, когда я поместил окружающий "мой-сетка" в частичное представление, это работало. Я не понимаю, почему, но сейчас это работает.

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>
Другие вопросы по тегам