Filter und Paginierung in MVC 4
War ein langer Tag für mich, der versucht, dies herauszufinden, und ich glaube, es gibt immer eine Antwort auf stackoverflow. Ich suchte Beiträge, die ähnlich sind, aber ich denke, keiner hat was bin verzweifelt auf der Suche nach. Hier ist der deal, ich habe diese MVC 4 Projekt arbeite, aber ich lief in einige Probleme, die ausgelöst mich zu werfen, es zu öffnen. Mit IPageList für die Paginierung auf meinem MVC ist ganz cool, aber wie kann ich die paging-Ergebnis gefiltert mit dem gleichen ActionResult container für den index. Hier ist etwas code, um Speisen mit.
public ActionResult Index(int? page, int category = 0)
{
int pageSize = 10;
int pageNumber = (page ?? 1);
if (category != 0)
{
var products = (from p in db.Products where p.ProductID == category select p).OrderBy(x => x.ProductName).ToList();
return View(products.ToPagedList(pageNumber, pageSize));
}
else
{
var products = (from p in db.Products select p).OrderBy(x => x.ProductName).ToList();
return View(products.ToPagedList(pageNumber, pageSize));
}
}
Grundsätzlich die int Kategorie ist der Wert, gewonnen aus der dropdownlist. Es filtert perfekt, aber das Problem ist, wenn ich die filter und das Ergebnis größer ist als 10, und ich versuche, um auf die nächste Seite gehen, gibt es auf den index erste Ergebnis. Debugging es mir klar, sobald die nächste geklickt wird, wird der Wert von int Kategorie gelöscht, und es Schritte in den else-block. Hier ist das paging-control-vielleicht gibt es etwas, das angepasst werden muss...
<div>Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber)
of @Model.PageCount
@if (Model.HasPreviousPage)
{
@Html.ActionLink("<<", "Index", new { page = 1, sortOrder = ViewBag.CurrentSort, currentFilter=ViewBag.CurrentFilter })
@Html.Raw(" ");
@Html.ActionLink("< Prev", "Index", new { page = Model.PageNumber - 1, sortOrder = ViewBag.CurrentSort, currentFilter=ViewBag.CurrentFilter })
}
else
{
@:<<
@Html.Raw(" ");
@:< Prev
}
@if (Model.HasNextPage)
{
@Html.ActionLink("Next >", "Index", new { page = Model.PageNumber + 1, sortOrder = ViewBag.CurrentSort, currentFilter=ViewBag.CurrentFilter })
@Html.Raw(" ");
@Html.ActionLink(">>", "Index", new { page = Model.PageCount, sortOrder = ViewBag.CurrentSort, currentFilter=ViewBag.CurrentFilter })
}
else
{
@:Next >
@Html.Raw(" ")
@:>>
}
Was ich brauche ist für die gefilterten Ergebnisse wieder auf der Seite zu reagieren, um die Auslagerungsdatei. Ich erwarte Antworten. Danke!
InformationsquelleAutor Oluwafemi | 2012-11-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Ihrem action-container-set
ViewBag.CurrentFilter = category;
vorausgesetzt CurrentFilter ist der KategorieInformationsquelleAutor Suhas
Mit der Hilfe von der vorherigen Antwort und Kommentar gegeben durch Suhas ich war in der Lage zu kommen mit eine klarere und bessere Lösung. Hier ist die endgültige Lösung:
Ich hoffe, es hilft anderen da draußen. Suhas verdient daneben. Prost!
NB: Suhas ist Kommentar unter dieser Lösung eine Menge Fragen.
category
undCategoryFilter
halten Sie die gleichen Wert-und zugeordnet sind, von jedem anderen, dann brauchen Sie nicht zu halten die beiden Variablen. Nur die EinstellungViewBag.CurrentFilter = category
und ändern der query-string-parameter im Anker-tag zucategory
auscurrentFilter
sollte es tun.Sah gerade deinen Kommentar... Wenn es funktioniert, werde ich mein edit-code und markieren Euch die Antwort... Cheers!
InformationsquelleAutor Oluwafemi
Hier ist der perfekte code für dieses problem.
InformationsquelleAutor sandip parmar