2012-10-24 14 views
30

Tôi muốn xây dựng một Dropdownlistfor trống để nhận được kết quả của một lựa chọn Dropdownlisfor trước:Xây dựng một sản phẩm nào MVC DropdownListFor cho một Cascade Sub-Danh sách

Quan điểm thực tế:

<div id="makes"> 
     @Html.DropDownListFor(m => m.Make_Id, Model.MakeList, HeelpResources.DropdownlistMakeFirstRecord) 
    </div> 
    <div id="models"> 
     @Html.DropDownListFor(m => m.Model_Id, Model.ModelList, HeelpResources.DropdownlistModelFirstRecord) 
    </div>   

Controller thực tế (để làm việc tôi đã phải xây dựng một SelectedList rỗng nhưng có vẻ như kỳ lạ có để làm điều này):

public virtual ActionResult Create() 
    { 
     // Build the Dropdownlist for the Makes 
     var makesDto = _makeService.ListAllMakes(); 
     var makesViewModel = Mapper.Map<IList<MakeDto>, IList<MakeViewModel>>(makesDto); 

     // Build the Dropdownlist for the Models 
     var makeId = -1; 
     var modelsDto = _modelService.ListModelByMake(makeId); 
     var modelsViewModel = Mapper.Map<IList<ModelDto>, IList<ModelViewModel>>(modelsDto); 

     // Build the ViewModel to return to the View 
     CreateAdViewModel viewModel = new CreateAdViewModel(); 
     viewModel.MakeList = new SelectList(makesViewModel, "ID", "Name"); 
     viewModel.ModelList = new SelectList(modelsViewModel, "ID", "Name"); 

     return View(viewModel); 
    } 

có cách nào để xây dựng một cái gì đó như thế này: @ Html.DropDownListFor (m => m.Model_Id, null)

Và xóa // Tạo danh sách thả xuống cho các kiểu máy từ bộ điều khiển?

Cảm ơn

Trả lời

88

xuống tìm thấy một giải pháp mà tôi nghĩ rằng là tốt nhất bởi vì nó không có dịch vụ gọi để xây dựng dropdroplist trống và nó được gõ mạnh mẽ:

@Html.DropDownListFor(m => m.Model_Id, Enumerable.Empty<SelectListItem>(), HeelpResources.DropdownlistModelFirstRecord) 
+2

Cảm ơn bạn Patrick tuyệt vời! – Shawn

+0

Sẽ tốt nếu bạn đánh dấu phần này là câu trả lời cho câu hỏi của riêng bạn. –

+0

@AJ. cảm ơn cho nhận xét :) – Patrick

0

Cá nhân tôi sẽ làm điều này với một chút jQuery và một phần xem bổ sung. Biểu mẫu của bạn có thể trông như thế này:

<div id="makes"> 
     @Html.DropDownListFor(m => m.Make_Id, Model.MakeList, HeelpResources.DropdownlistMakeFirstRecord) 
</div> 
<div id="models"> 

</div> 

<script type="text/javascript"> 
$(function(){ 
    $("#Make_Id").change(function(){ 
     $("#models").load("/Controller_Name/GetModels/" + this.val()); 
    } 
}); 
</script> 

và sau đó trong điều khiển của bạn:

public ActionResult GetModels(int id) 
{ 
    ViewBag.DdlModels = new SelectList(rep.GetModelsForCar(id), "Id", "Name"); 
    return PartialView(); 
} 

và sau đó chỉ cần dính thả của bạn danh sách trong GetModels phần xem

+0

Và thả xuống mẫu bị gõ mạnh trong giao diện đến quan điểm từng phần? Nó sẽ vượt qua giá trị được chọn Model_Id từ trình đơn thả xuống tới bộ điều khiển bên trong viewmodel? – Patrick

0

Sau đây là làm việc:

@Html.DropDownListFor(m => m.Model_Id, **new SelectList(new List<string>()**)); 
+1

Xin chào, cảm ơn! Tôi phải thử nó ;) – Patrick

Các vấn đề liên quan