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