2012-04-04 139 views
4

我創建了兩個dropdownlist,我試圖做的是讓它們級聯。這樣第二個依賴於第一個。究其原因是因爲我的數據庫奠定了這樣級聯下拉列表MVC 3 C#

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

正如你可以看到我有兩個Car_Names是相同的,但Car_drive是不同的。所以當用戶點擊第一個下拉列表時,他們會看到本田,謳歌,豐田......但如果他們選擇本田,第二個下拉框會說2wheeldrive和4wheeldrive。

我的控制器看起來喜歡這樣的:

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()); 
    } 

我的視圖看起來像這樣

 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")) { %> 
       <%}%>  

我經歷了這麼多的教程讀,但沒有真正接近。我接近MVC Awesome的東西,但我不斷收到錯誤,說SelectableItem缺少一個引用。任何幫助實現這個目標都很好。

更新 我已經加入這個我控制器

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); 
    } 

現在需要一些幫助,寫劇本,以獲得從控制器此信息。

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

回答

3

檢查:http://blogs.msdn.com/b/rickandy/archive/2012/01/09/cascasding-dropdownlist-in-asp-net-mvc.aspxhttp://msprogrammer.serviciipeweb.ro/2011/02/13/asp-net-mvc-jquery-and-razor-cascading-dropdown-retrieving-partial-views-json-send-objects-handling-errors/,你將不需要任何其他東西。這兩個項目都有一個下載檢查代碼的演示。

問候

編輯:您的更新後

不要使用ViewData的或ViewBag。使包含汽車和CarDrive的屬性的ViewModel更清晰,更容易添加新內容。

+0

感謝您的插件。這也很好,也審查我的http://www.asp.net/mvc/tutorials/javascript/working-with-the-dropdownlist-box-and-jquery/using-the-dropdownlist-helper-with-aspnet-mvc - - 在ViewModel v。ViewBag - ViewBag很好,易於更新。畢竟這不是模型,而是關於模型的元數據 – RickAndMSFT 2012-04-04 21:57:08

2

使用一些客戶端的jQuery腳本,讓您的Car_Name下拉斷火每當有人改變選擇的事件。

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

現在你想要做的是,當這個事件被激發,斷火與Car_Name值的AJAX請求。你的ActionMethod返回JsonResult

然後,您在客戶端捕獲該信息,並解析數據以將選擇選項插入到您的下拉菜單Car_Drive中。

這就是你需要做的,分解成小塊,很容易遵循。

+0

正如plurby所說,我的博客有一個完整的示例,您可以下載:http://blogs.msdn.com/b/rickandy/archive/2012/01/09/cascasding-dropdownlist-in-asp-net- mvc.aspx – RickAndMSFT 2012-04-04 21:59:23