不使用动态类的东西ViewBag
您可以将新属性添加到您的视图模型 IEnumrable<SelectListItem>
类型的选择选项的强类型的视图模型方法。
视图模型是一个简单的POCO类,用于在视图到动作方法之间传输数据,反之亦然。它们是特定于观点的。添加仅用于视图的属性。
public class CreateUserVm
{
public IEnumrable<SelectListItem> Labs { set;get;}
public int SelectedLabId { set;get;}
//Add other properties as needed for the view
}
,并在你的GET操作,创建这个视图模型的对象,加载实验室财产和发送到视图。
public ActionResult Create()
{
var vm= new CreateUserVm();
// Hard coded for demo. You can replace with real data from db
vm.Labs = new List<SelectListItem> {
new SelectListItem { Value="1", Text="One" },
new SelectListItem { Value ="2", Text="Two" }
};
return View(vm);
}
,并在其中强类型此视图模型视图,调用DropDownListFor助手方法
@model CreateUserVm
@Html.DropDownListFor(f=>f.SelectedLabId, Model.Labs,"Select one")
预先选择的下拉选项
如果你喜欢当剃须刀呈现页面时预先选择一个选项,您可以将您的视图模型的SelectedLabId
属性值设置为选项项目(SelectListItem)的value
属性值。
public ActionResult Create()
{
var vm= new CreateUserVm();
// Hard coded for demo. You can replace with real data from db
vm.Labs = new List<SelectListItem> {
new SelectListItem { Value="1", Text="SugarLab" },
new SelectListItem { Value ="2", Text="CandyLab" },
new SelectListItem { Value ="3", Text="SodaLab" }
};
vm.SelectedLabId = 2; // Will set "CandyLab" option as selected
return View(vm);
}
如果你要使用真实数据,而不是硬编码的2项,你可以做到这一点
vm.Labs = dbContext.Labs.Select(x=>new SelectListItem { Value=x.Id.ToString(),
Text= x.Name }).ToList();
假设dbContext
是你的DbContext类对象,它有DbSet<Lab>
型Labs
财产每个Lab实体都有一个Id和Name属性。
'ViewBag'只是一个容器 - 传递任何你需要的数据作为强类型的'@ model' – Jasen