2009-04-08 5 views
1

Ich versuche zu finden, was ist die beste Praxis für View-Controller-Kommunikation für den Fall, wenn ich zum Beispiel Filterung benötigen.Blick auf Controller-Kommunikation

Ich habe Sammlung von Elementen auf der Seite und Filtersteuerung. Ich filtere Elemente nach Buchstaben, Status, etc ... Es ist einfach Szenario, ich bin Filter senden ausgewählte Werte an den Controller und Controller gibt Ergebnisse zurück auf die Seite.

Wenn Sie darüber nachdenken, ist es ein Richtungszyklus. Rufen Sie den Call Controller mit Parametern (Filterwerte) auf, der Controller ruft die Datenbank auf und ruft dann Elemente ab und gibt diese Elemente an die Ansicht zurück. Gibt es eine Möglichkeit, diese Elemente und Controller an den Controller zu senden, nur um sie zu filtern und der Ansicht gefilterte Sammlung zurückzugeben? Oder vielleicht, um diese Reise zum Server zu verkürzen, dem Controller nur IDs von Elementen und Controller zu geben, welche der Elemente aus der Datenbank zu ziehen und sie dann zu filtrieren, geben gefilterte Sammlung zurück ...

Schlechte Praxis? Einige arbeiten um?

Was denkst du?

Dank

Antwort

0

Wie ich dies getan haben, ist wie das, was Sie in Ihrem letzten parag erwähnt:

senden diese Elemente und Steuerung an die Steuerung nur um sie zu filtern und gefilterte Auflistung der Ansicht zurückgeben

Sie können linq dazu verwenden. Also lass uns sagen, was du ihm eine Liste schickst. Wenn Sie also Ihren Filter ausführen, sagen wir nach Kategorie, erwarten Sie eine gefilterte Liste nach Kategorie (sagen wir Kategorie = "Buch").

In Ihrem Controller sollte Ihre List() - Aktion (oder wie immer Sie sie nennen) bereit sein, einen Filterparameter zu übernehmen. Basierend auf diesem Parameter verwenden Sie dann LINQ, um die Sammlung einzuschränken, die an die Ansicht übergeben werden soll. Wie folgt:

public ActionResult List(bool fromCache, string filter) 
{ 
    // if filtering - always pull from cache to increase performance 
    ProductList productList; 
    if (fromCache) 
     productList = Session[SessionKeys.ProductList] as ProductList; 
    else 
    { 
     productList = ProductInfoList.GetProductInfoList(); 
     Session[SessionKeys.ProductInfoList] = productList; 
    } 

    // apply filter 
    var data = productList.Where(p => p.Category == filter); 
    return View(ViewLocations.ProductListing, data); 
} 

Der Code ist möglicherweise nicht syntaktisch korrekt, aber Sie gehen - viel Glück.

+0

nette Lösung, um diese Elemente aus der Sitzung zu nehmen .. in Ihrem Beispiel, wenn fromCache Variable ist falsch, ziehen Sie diese Elemente aus db..Ich möchte einfach zu meinem Controller ein Filter sein .. senden Sie ihm Elemente und zurück sie gefiltert, tnx – Marko