强类型视图模型方法不使用像 ViewBag 这样的动态东西
您可以为类型的 SELECT 选项添加新属性到视图模型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 操作中创建此视图模型的对象,加载 Labs 属性并将其发送到视图。
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")
在下拉列表中预先选择一个选项
如果您想在 razor 渲染页面时预先选择一个选项,您可以设置SelectedLabId
您的视图模型的属性值value
选项项(SelectListItem)的属性值。
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 类对象,它有一个Labs
类型的属性DbSet<Lab>
其中每个 Lab 实体都有一个 Id 和 Name 属性。