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>