asp.net-mvc view html.dropdownlistfor

asp.net mvc - Cree una lista desplegable de MVC vacía para una sublista de Cascade



asp.net-mvc view (3)

Encontré una solución que creo que es la mejor porque no es una llamada de servicio para crear la lista desplegable vacía y está fuertemente tipada:

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

Me gustaría construir una lista desplegable vacía para recibir los resultados de una selección previa Dropdownlisfor:

La vista real:

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

El controlador real (para trabajar tuve que crear una Lista de selección vacía, pero parece extraño tener que hacer esto):

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

¿Hay alguna manera de construir algo como esto? @ Html.DropDownListFor (m => m.Model_Id, null)

¿Y eliminar el // Build the Dropdownlist for the Models del controlador?

Gracias


Personalmente, haría esto con un poco de jQuery y una vista parcial adicional. Tu forma podría verse así:

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

y luego en su controlador:

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

y luego simplemente pegue su lista desplegable en la vista parcial GetModels


Lo siguiente está funcionando :

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