Я реализовал WebGrid. Сортировка, разбиение по страницам и фильтрация не работают вместе. Они работают, когда вы используете их в одиночку. Когда вы объединяете три, фильтрация не работает.
Симптом:
Отфильтровать набор результатов, затем отсортировать.
или
Отфильтруйте набор результатов, затем перейдите на следующую страницу.
В обоих случаях фильтр теряется. Но это страница и сортировка.
В коде позади:Когда метод действия вызывается через сортировку или разбиение на страницы, для каждого из параметров фильтра отображаются пустые значения.
Когда метод действия вызывается через фильтр, передаются параметры фильтра.
Это говорит мне о том, что когда вы инициируете сортировку или разбиение на страницы, форма не отправляется.
public ActionResult MyPage(int? page, int? rowsPerPage,
string sort, string sortdir,
string orderNumber, string person, string product)
Я просмотрел SO и другие ресурсы. Есть много примеров, и люди спрашивают, как сделать то или иное или все три. Но я видел только один с моей проблемой , поэтому публикую его здесь. (его тоже не удалось решить)
Моя страница реализована следующим образом:
@using (Ajax.BeginForm("MyPage", null, new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "myGrid" }, new { id = "filter" }))
{
Order Number
Person
Product
@Html.Partial("_MyPage", Model)
}
Сетка реализована как частичное представление, подобное этому:
@{
var grid = new WebGrid(canPage: true, rowsPerPage: Model.rowsPerPage, canSort: true, ajaxUpdateContainerId: "grid", ajaxUpdateCallback: "resetUI");
grid.Bind(Model.rows, rowCount: Model.TotalRecords, autoSortAndPage: false);
@grid.GetHtml(
tableStyle: "fancyTable",
headerStyle: "header",
footerStyle: "footer",
rowStyle: "row",
alternatingRowStyle: "alt",
mode: WebGridPagerModes.Numeric | WebGridPagerModes.NextPrevious,
nextText: "Next",
previousText: "Previous",
htmlAttributes: new { id = "grid" },
columns: grid.Columns(
grid.Column("OrderDate", "Order Date", format: @@((item.OrderDate != null) && (item.OrderDate.ToString("MM/dd/yyyy") != "01/01/0001") ? item.OrderDate.ToString("MM/dd/yyyy") : "") ),
grid.Column("OrderNumber", "Order Number"),
grid.Column("Field1, "Field 1"),
grid.Column("Field2", "Field 2"),
grid.Column("Person", "Person"),
grid.Column("Product", "Product"),
grid.Column(format: (item) => Html.ActionLink("View", "Details", new { id = item.orderNumber }))
)
);
}