2009-12-29 6 views
10

Aus irgendeinem Grund bin ich auf diesem fest. Ich muss Ergebnisse von einer Ansicht basierend auf einer DropDownList in derselben Ansicht filtern. Die Grundidee ist folgende: Ich habe eine Liste von Anbietern, die zu verschiedenen Partnern gehören, aber die Anbieterliste enthält ALLE Anbieter zusammen (für alle Partner). Ich muss in der Lage sein, die Anbieter nach Partner anzuzeigen, wenn jemand nur diesen Partner sehen möchte (ansonsten wird die Standardliste ALLE Anbieter sein). Meine Ansicht ist derzeit die "Standard" (zeigt alle), aber aus irgendeinem Grund sitze ich hier und starrte auf den Monitor (für die letzten 2 Stunden!) Und versuchte herauszufinden, wie diese Ergebnisse gefiltert werden.ASP.NET MVC Filtering Ergebnisse in einer Liste/Raster

Irgendwelche Vorschläge, wo man anfangen/wie man es macht ?!

Antwort

10

EDIT: Wenn Sie dies mit jQuery und AJAX tun wollen (was eine bessere Benutzererfahrung bieten wird, da nur die Unterteilungen Liste neu geladen), siehe this tutorial.

Wenn ich richtig verstehe, möchten Sie im Grunde eine WebForms-Postback.

Nehmen wir an, Sie haben eine Kontrolle über Länder- und Länderunterteilungen (z. B. Bundesstaaten, Provinzen usw.). Wenn sich das Land ändert, möchten Sie, dass die entsprechenden Unterteilungen angezeigt werden.

So würde diese Ansicht sein:

<% using (Html.BeginForm()) { %> 
    <%=Html.DropDownList("Address.CountryId", new SelectList(Country.GetAll(), "Id", "Name"), new { onchange = "this.form.submit();" })%> 
    <%=Html.DropDownList("Address.CountrySubdivisionId", new SelectList(CountrySubDivision.GetByCountryId(Model.CountryId), "Id", "Name"))%> 
    <input type="submit" name="btnSubmit" value="Submit"/> 
<%} %> 

Dies ist der Schlüssel für die abhängige Liste zu bekommen, zu filtern:

new { onchange = "this.form.submit();" } 

Und in der Steuerung, würden Sie so etwas wie diese:

In dem obigen Code, wenn die Formularübergabe ausgelöst wurde, indem Sie den Wert in einem Dropdown ändern, btnSubm es wird null sein. Daher kann die Aktion, an die Sie POST senden, feststellen, ob der Benutzer seine Änderungen abschließen wollte oder nicht.

+0

Super Antwort. Vielen Dank! – SlackerCoder

+0

Sie sind herzlich willkommen. Das war für mich auch entscheidend, da ich meinen Mitarbeitern zeigen wollte, dass MVC alles machen kann, was wir brauchen. –

+2

Scheint der Tutorial-Link ist gebrochen ... – SteveC

3

Es gibt viele Möglichkeiten, diese Katze zu häuten. Hier ist eins.

Schließen Sie Ihre DropDownList in einem Formular mit METHOD = GET ein.

<form action="" method="get"> 
    <select name="provider"> 
    <option>1</option> 
    <!-- etc --> 
    </select> 
</form> 

Dann in Ihr Controller, Filter basierend auf dem Wert des Anbieters, der in übergeben wurde. Denken Sie daran, es als ein Nullable Parameter zu behandeln, so dass Sie irgendeine Art von Verhalten haben können, wenn es leer ist.

Ohne etwas von Ihrem aktuellen Code zu veröffentlichen, ist es schwierig, viel genauer zu sein.

+1

+1 für ein einfaches Codebeispiel. –

1

Angenommen, Sie übergeben ein Modell wahrscheinlich an die Ansicht, und dieses Modell ist eine Liste oder IEnummerable von Partnern. Was Sie tun möchten, ist die Liste einzuschränken. Fügen Sie dazu eine Dropdown-Liste in die Ansicht ein und füllen Sie sie mit möglichen Partnern aus. Dies kann entweder durch Einfügen einer Liste in ViewData oder durch Erweitern des Modells, das an die Ansicht zurückgegeben wird, erfolgen. Beide haben Vorteile. Wenn Sie jetzt das Dropdown-Menü ändern, laden Sie die Seite neu, fügen Sie jedoch einen Parameter hinzu, der der Filter ist. Wenn in der Steuerung dieser Parameter in der Aktion nicht vorhanden ist, geben Sie eine ungefilterte Liste zurück, wenn Sie einen Filter anwenden und die Liste zurückgeben. Die Ansicht wird einfach dümmer zeigen, was Sie ihm geben.

Wie für die Filterung möchten Sie vielleicht versuchen, mit LINQ.

0

Sie möchten wahrscheinlich einen Parameter für Ihre Controller-Aktion, vielleicht eine (nullable?) ID des Anbieters, um die Ergebnisse bereits zu filtern, wenn Sie sie von der DB erhalten. Verwenden Sie dann dieselbe Ansicht, um sie aufzulisten, und fordern Sie eine neue Liste an, wenn sich die Dropdown-Liste ändert.

6

Um die früheren Antworten hinzuzufügen.

Um ein Drop-down (in ASP .NET MVC 3) zu erstellen Ich habe folgenden:

Add Code Index.cshtml

@using (Html.BeginForm()) 
{  
@Html.DropDownList("EmployeeId", (SelectList)ViewData["EmployeeId"])  
<input type="submit" name="btnSubmit" value="Submit"/> 
} 

Code YourModelNameController.cs in der Standard-Action hinzu Index()

public ActionResult Index() 
{ 

    //create a selectlist 
     var employeeList = from el in db.Employee select el; 
     ViewData["EmployeeId"] = new SelectList(employeeList, "EmployeeId", "TmName"); 

     return View(modelName); 
    } 
+1

+1 Ich war auf der Suche nach einer Razor spezifischen Antwort! Vielen Dank! –