2012-10-24 12 views
30

Chciałbym zbudować pusty Dropdownlistfor otrzymanych wyników poprzedniej selekcji Dropdownlisfor:Budowanie pusty MVC DropdownListFor na kaskadę podmenu

Rzeczywisty widok:

<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>   

Rzeczywista Controller (do pracy musiałem zbudować pusty SelectedList ale wydaje się dziwne, aby to zrobić):

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

Czy istnieje sposób, aby zbudować coś takiego: @ Html.DropDownListFor (m => m.Model_Id, null)

I usunąć // Zbudować listę rozwijaną dla modeli ze sterownika?

Dzięki

Odpowiedz

88

dół znalazł rozwiązanie, które moim zdaniem jest najlepszy, ponieważ nie jest to wezwanie serwisowe do zbudowania pustej listy upuszczeń i jest silnie wpisane:

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

Fantastyczne dzięki, Patrick! – Shawn

+0

Byłoby dobrze, gdyby zaznaczyć to jako odpowiedź na własne pytanie. –

+0

@AJ. dzięki za uwagę :) – Patrick

0

Osobiście chciałbym to zrobić z odrobiną jQuery i dodatkowego widoku częściowym. Formularz może wyglądać następująco:

<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> 

a następnie w kontrolerze:

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

a potem po prostu trzymać rozwijaną listę w getModels częściowy widok

+0

A rozwijana modelu pobiera silnie wpisany w widoku nadchodzącym częściowego widoku? Przekaże wybraną wartość Model_Id z menu rozwijanego do kontrolera wewnątrz modelu podglądu? – Patrick

0

Poniższy pracuje:

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

Cześć, dzięki! Muszę to wypróbować;) – Patrick