Tworzenie pustej listy rozwijanej MVC dla kaskadowej listy podrzędnej

Chciałbym zbudować pustą listę DropDownList, aby otrzymać wyniki poprzedniego wyboru Dropdownlisfor:

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>        

Rzeczywisty kontroler (do pracy musiałem zbudować pustą SelectedList, ale wydaje mi się to dziwne):

   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 jest sposób na zbudowanie czegoś takiego: @ Html.DropDownListFor (M => M.Model_Id, null)

I usuń / / Zbuduj Dropdownlist Dla Modeli z kontroler?

Dzięki

Author: Patrick, 2012-10-24

3 answers

Znalazłem rozwiązanie, które moim zdaniem jest najlepsze, ponieważ jako brak wywołania usługi do budowania dropdroplist jest puste i jest mocno wpisane:

@Html.DropDownListFor(m => m.Model_Id, Enumerable.Empty<SelectListItem>(), HeelpResources.DropdownlistModelFirstRecord)
 91
Author: Patrick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-17 13:46:37

Osobiście zrobiłbym to z odrobiną jQuery i dodatkowym częściowym widokiem. Twoja forma może wyglądać tak:

<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 następnie po prostu umieść swoją rozwijaną listę w częściowym widoku GetModels

 0
Author: Chris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-24 15:43:27

Działa :

@Html.DropDownListFor(m => m.Model_Id, **new SelectList(new List<string>()**));
 0
Author: Maniyar Bhargav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-19 09:14:35