Filter geht in WebGrid + Paging + Sortieren + Filtern in .NET 4.0 verloren

Ich habe ein WebGrid implementiert. Sortieren, Blättern und Filtern funktionieren nicht zusammen. Sie funktionieren, wenn Sie sie alleine benutzen. Wenn Sie die drei gleichzeitig kombinieren, funktioniert die Filterung nicht.

Das Symptom:
Filtern Sie die Ergebnismenge und sortieren Sie sie.

oder

Filtern Sie die Ergebnismenge und fahren Sie mit der nächsten Seite fort.

In beiden Fällen geht der Filter verloren. Aber es blättert und sortiert.

Im Code dahinter: Wenn die Aktionsmethode über eine Sortierung oder Paginierung aufgerufen wird, werden für jeden Filterparameter Nullen angezeigt.

Wenn die Aktionsmethode über den Filter aufgerufen wird, kommen die Filterparameter durch.

Dies sagt mir, dass beim Initiieren einer Sortierung oder Paginierung das Formular nicht gesendet wird.

<code>public ActionResult MyPage(int? page, int? rowsPerPage, 
              string sort, string sortdir, 
              string orderNumber, string person, string product)
</code>

Ich habe mich auf SO und anderswo umgesehen. Es gibt viele Beispiele und Leute, die fragen, wie man das eine oder andere oder alle drei macht. Aber ich habe nur geseheneins mit meinem ProblemAlso poste ich es hier. (sein war auch ungelöst)

Ich habe meine Seite wie folgt implementiert:

<code>@using (Ajax.BeginForm("MyPage", null, new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "myGrid" }, new { id = "filter" }))
{
    <div class="right">
        <select id="rowsPerPage" name="rowsPerPage">
            <option>15</option>
            <option>25</option>
            <option>50</option>
            <option>75</option>
            <option>100</option>
        </select>
    </div>  

    <div class="table">
        <div class="tableRow">
            <div class="tableCell">
                Order Number
            </div>
            <div class="tableCell">
                Person
            </div>
            <div class="tableCell">
                Product
            </div>
        </div>
        <div class="tableRow">
            <div class="tableCell">
                <input type="text" id="orderNumber" name="orderNumber" />
            </div>
            <div class="tableCell">
                <input type="text" id="person" name="person" />
            </div>
            <div class="tableCell">
                <input type="text" id="product" name="product" />
            </div>          
            <div class="tableCell">
                <input type="submit" class="button" value="Search" />
            </div>  
        </div>
    </div>

<br/>

<div id="myGrid">
    @Html.Partial("_MyPage", Model)
</div>

}
</code>

Das Raster wird als Teilansicht wie folgt implementiert:

<code><script type="text/javascript">
    $(document).ready(function () {
        resetUI();
    });
</script>

@{
    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: @<text>@((item.OrderDate != null) && (item.OrderDate.ToString("MM/dd/yyyy") != "01/01/0001") ? item.OrderDate.ToString("MM/dd/yyyy") : "")</text>),
            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 }))
            )
        );
}
</code>

Antworten auf die Frage(3)

Ihre Antwort auf die Frage