Jac*_*ack 3 asp.net-mvc selectlist html.dropdownlistfor razor dropdownlistfor
我想在不使用的情况下@Html.DropDownListFor从Model数据绑定,Viewbag并在Web上查看许多不同的示例.但他们中的大多数使用Viewbag或扩展方法,我想要一个更好的方法来解决这个问题.我尝试了以下方法,但它似乎不起作用:
@Html.DropDownListFor(m => m.LabId, new SelectList(Model.Lab, "Id", "Name"),
"---- Select----", new { @class = "selectpicker" } )
Run Code Online (Sandbox Code Playgroud)
是否可以绑定@Html.DropDownListFor直接从型号不使用Viewbag或任何额外的方法中Controller的ASP.NET MVC5?你能举一些例子来表现最佳吗?
强类型视图模型方法,不使用像ViewBag这样的动态内容
您可以为视图模型添加新属性以获取类型的SELECT选项
IEnumrable<SelectListItem>.
view model是一个简单的POCO类,用于在视图到操作方法之间传输数据,反之亦然.它们特定于观点.添加视图仅需要的属性.
public class CreateUserVm
{
public IEnumrable<SelectListItem> Labs { set;get;}
public int SelectedLabId { set;get;}
//Add other properties as needed for the view
}
Run Code Online (Sandbox Code Playgroud)
在您的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);
}
Run Code Online (Sandbox Code Playgroud)
并且在对该视图模型强类型的视图中,调用DropDownListFor辅助方法
@model CreateUserVm
@Html.DropDownListFor(f=>f.SelectedLabId, Model.Labs,"Select one")
Run Code Online (Sandbox Code Playgroud)
在下拉列表中预选一个选项
如果您希望在剃刀渲染页面时预先选择一个选项,则可以将SelectedLabId视图模型的value属性值设置为Option项(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);
}
Run Code Online (Sandbox Code Playgroud)
如果您想使用真实数据,而不是硬编码的2项,则可以执行此操作
vm.Labs = dbContext.Labs.Select(x=>new SelectListItem { Value=x.Id.ToString(),
Text= x.Name }).ToList();
Run Code Online (Sandbox Code Playgroud)
假设dbContext是你的DbContext类对象,它有一个Labs类型的属性,DbSet<Lab>其中每个Lab实体都有一个Id和Name属性.