我显然错过了一些东西。 我认为填充DropDownListFor就像从控制器返回列表一样简单。
在我的控制器中,我回来了:
public ActionResult ListCollege()
{
return View(db.Colleges.ToList());
}
在视图中我将模型设置为:
@model IEnumerable<CollegeApp.Models.DataModels.College>
但这显然不是填充DropDownListFor助手的正确方法。
我一直在做一些阅读,我不完全确定“新的SelectList”的角色是DropDownListFor中的第二个参数,它的意思是IENumerable类型。
我不太明白这个IENumberable是如何从模型/控制器传递到视图的。
由于
答案 0 :(得分:1)
要有效地使用DropDownListFor
辅助方法,您需要使用视图模型的属性作为表达式参数传递,该参数将是lambda表达式。帮助器将构建SELECT元素,其name
和Id
属性值与该属性名称匹配。帮助器的第二个参数是SelectListItem
的集合,它将用作源数据来构建下拉列表的选项。
所以在你的情况下,创建一个视图模型,它有2个属性,一个用于集合,一个用于选定的值
public class CollageSelectionVm
{
public IEnumerable<SelectListItem> Collages { set;get;}
public int SelectedCollage { set;get;}
}
在您的GET操作中,创建此视图模型的对象,加载Collages
集合属性并将该对象发送到视图
public ActionResult ListCollege()
{
var vm = new CollageSelectionVm () ;
vm.Collages = db.Collages
.Select(x=>new SelectListItem { Value = x.Id.ToString(),
Text=x.Name })
.ToList();
return View(vm);
}
现在,在您的视图模型中强类型的视图中,您将使用DropDownListFor
帮助程序
@model CollageSelectionVm
@Html.DropDownListFor(a => a.SelectedCollage , Model.Collages , "Select one")