Фильтр теряется в WebGrid + Paging + Sorting + Filtering в.NET 4.0

Я реализовал 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 }))
            )
        );
}

14
задан Community 23 May 2017 в 10:30
поделиться