2012-04-04 5 views
4

Ich habe zwei Dropdown-Liste erstellt, was ich versuche zu tun ist, sie zu kaskadieren. So, dass die zweite von der ersten abhängig ist. Der Grund dafür ist, weil meine Datenbank ist wie dieseCascading Dropdown-Listen MVC 3 C#

angelegt
****Car_iD  Car_Name   Car_drive** 
     1   Honda    2 wheel drive 
     2   Acura    4wheel drive   
     3   Toyota   2 wheel drive 
     4   Honda    4wheelDrive  

Wie Sie Ich habe zwei Car_Names sehen können, die gleich sind, aber die Car_drive ist anders. Wenn der Benutzer also auf die erste Dropdown-Liste klickt, werden sie Honda, Acura, Toyota sehen ... aber wenn sie Honda wählen, würde die zweite Dropdown-Box 2Wheeldrive und 4Wheeldrive heißen.

mein Controller sieht gefällt das:

public ActionResult Home() 
    { 
    ViewData["Car_Name"] = new SelectList(_context.Cars.Select(a => a.Car_Name).Distinct()); 
    ViewData["Car_drive"] = new SelectList(_context.Cars.Select(a => a.Car_drive).Distinct()); 
    } 

Meine Ansicht wie folgt aussieht

 Choose an Car 
       <label for= "Car_Names"></label> 
       <%= Html.DropDownList("Car_Name")%> 

       <label for= "Application_Names"></label> 
       <%= Html.DropDownList("Car_drive")%>  
       <input type = "submit" value ="Update" /> 
       <% using(Html.BeginForm("Home", "Home")) { %> 
       <%}%>  

ich durch so viele Tutorial gelesen haben, aber es kommt nichts wirklich nahe. Ich habe mich mit den MVC Awesome-Sachen beschäftigt, aber ich bekam immer wieder Fehler, weil SelectableItem keine Referenzen enthielt. Jede Hilfe bei der Umsetzung wäre großartig.

Update Ich habe diese

public ActionResult CarNameChange(string Car_Name) 
    { 
     var car_drive = from env in _context.Cars 
           where env.Car_Name == Car_Name 
           select car_drive; 
     return Json(ViewData["Car_Drive"] = car_drive); 
    } 

nun etwas Hilfe um das Skript zu schreiben, um meine Controller hinzugefügt, um diese Informationen von der Steuerung zu erhalten.

<script type = "text/javascript"> 
    $('#Car_Names').change(function(){ 
     var selectedName = $(this).val(); 
     $getJson('@Url.Action(" 

Antwort

3

Überprüfen: http://blogs.msdn.com/b/rickandy/archive/2012/01/09/cascasding-dropdownlist-in-asp-net-mvc.aspx und http://msprogrammer.serviciipeweb.ro/2011/02/13/asp-net-mvc-jquery-and-razor-cascading-dropdown-retrieving-partial-views-json-send-objects-handling-errors/ und Sie brauchen nichts anderes. Beide Projekte haben eine Demo zum Herunterladen, um Code zu inspizieren.

Grüße

EDIT: Nach dem Update

Verwenden Viewdata oder ViewBag nicht. Machen Sie ein ViewModel mit Eigenschaften für Autos und CarDrive, es ist sauberer und einfacher, etwas Neues hinzuzufügen.

+0

Danke für den Stecker. Es ist auch gut, meine http://www.asp.net/mvc/tutorials/javascript/working-with-the-dropdownlist-box-and-jquery/using-the-dropdownlist-helper-with-aspnet-mvc zu überprüfen. - Auf ViewModel v.ViewBag - ViewBag ist gut und einfach zu aktualisieren. Es ist schließlich nicht das Modell, es sind wirklich Meta-Daten über das Modell – RickAndMSFT

2

einige Client-Seite jQuery Scripting verwenden, haben Ihre Car_Name Drop-Down-Feuer aus ein Ereignis, wenn jemand die Auswahl ändert.

//Use your DOM identifier here. I don't know what it's called. 
$('#car_name').change(function() { 
    //Magic here. 
}); 

Nun, was Sie tun möchten, ist, wenn dieses Ereignis ausgelöst wird, feuern eine AJAX-Anforderung mit dem Wert von Car_Name ab.

Lassen Sie Ihre ActionMethod eine JsonResult zurückgeben.

Sie fangen dann diese Informationen auf der Client-Seite ein und analysieren die Daten, um ausgewählte Optionen in Ihr Dropdown-Menü Car_Drive einzufügen.

Das ist, was Sie tun müssen, in kleine Stücke unterteilt, die einfach zu folgen ist.

+0

Wie von Plurby erwähnt, hat mein Blog eine vollständige Probe, die Sie herunterladen können: http://blogs.msdn.com/b/rickandy/archive/2012/01/09/cascading-dropdownlist-in-asp-net-net- mvc.aspx – RickAndMSFT