Ho implementato una WebGrid. L'ordinamento, il paging e il filtraggio non funzionano insieme. Funzionano quando li usi da solo. Quando si combinano i tre, allo stesso tempo, il filtro non funziona.Il filtro si perde in WebGrid + Paging + Ordinamento + Filtro in .NET 4.0
Il sintomo:
Filtra il set di risultati, quindi ordina.
o
Filtro gruppo di risultati, quindi andare alla pagina successiva.
In entrambi i casi, il filtro viene perso. Ma fa pagina e ordina.
Nel codice sottostante: Quando il metodo di azione viene chiamato tramite un ordinamento o impaginazione, i valori nulli vengono visualizzati per ciascuno dei parametri del filtro.
Quando il metodo di azione viene chiamato tramite il filtro, i parametri del filtro vengono visualizzati.
Questo mi dice che quando si avvia un ordinamento o un'impaginazione che non invia il modulo.
public ActionResult MyPage(int? page, int? rowsPerPage,
string sort, string sortdir,
string orderNumber, string person, string product)
Mi sono guardato intorno su SO e altrove. Ci sono un sacco di esempi e persone che chiedono come fare l'uno o l'altro o tutti e tre. Ma ho visto solo one with my issue, quindi lo sto postando qui. (La sua era irrisolto così)
ho la mia pagina implementato come segue:
@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>
}
La griglia è implementato come una vista parziale in questo modo:
<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 }))
)
);
}
Hai trovato la soluzione per questo? – RredCat
Si noti che asp.net mvc creerà elementi di input nascosti aggiuntivi per le checkbox e che il WebGrid sembra reinterpretare questi 2 elementi se presenti in querystring in un singolo elemento con 2 valori, che possono causare problemi di analisi in Razor se un modello è associato a una casella di controllo tramite checkboxfor. Ho dovuto usare jQuery per cancellare questi campi nascosti sul lato client. –