Ich habe ein WebGrid implementiert. Sortieren, Paging und Filter funktionieren nicht zusammen. Sie arbeiten, wenn Sie sie alleine benutzen. Wenn Sie die drei gleichzeitig kombinieren, funktioniert das Filtern nicht.Der Filter geht verloren in WebGrid + Paging + Sortierung + Filterung in .NET 4.0
Das Symptom:
Die Ergebnismenge filtern, dann sortieren.
oder
Filter die resultset, dann gehen Sie auf der nächsten Seite.
In beiden Fällen ist der Filter verloren. Aber es tut Seite und sortieren.
Im folgenden Code: Wenn die Aktionsmethode über eine Sortierung oder Paginierung aufgerufen wird, werden Nullen für jeden der Filterparameter angezeigt.
Wenn die Aktionsmethode über den Filter aufgerufen wird, werden die Filterparameter durchlaufen.
Das sagt mir, dass wenn Sie eine Sortierung oder eine Seitenumbruch initiieren, dass es das Formular nicht übermittelt.
public ActionResult MyPage(int? page, int? rowsPerPage,
string sort, string sortdir,
string orderNumber, string person, string product)
Ich habe mich auf SO und anderswo umgesehen. Es gibt viele Beispiele und Leute fragen, wie man das eine oder andere oder alle drei macht. Aber ich habe nur one with my issue gesehen, also poste ich es hier. (Sein war ungelöst auch)
Ich habe meine Seite wie folgt umgesetzt:
@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>
}
Das Gitter wird als Teilansicht wie folgt umgesetzt:
<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 }))
)
);
}
Haben Sie eine Lösung dafür gefunden? – RredCat
Beachten Sie, dass asp.net mvc zusätzliche verborgene Eingabeelemente für Kontrollkästchen erstellt und dass das WebGrid diese 2 Elemente, falls vorhanden in der Abfragezeichenfolge, in ein einzelnes Element mit 2 Werten uminterpretiert, was zu Analyseproblemen in Razor führen kann, wenn ein Modell vorhanden ist gebunden an ein Kontrollkästchen über checkboxfor. Ich musste jQuery benutzen, um diese versteckten Felder auf der Klientenseite zu löschen. –