在 ASP.NET MVC5 中绑定 @Html.DropDownListFor 的最佳方法是什么?

2023-12-26

我要绑定@Html.DropDownListFor from Model不使用数据Viewbag并查看网络上的许多不同示例。但大部分都用Viewbag或扩展方法,我想要一个更好的方法来解决这个问题。我尝试了以下方法,但似乎不起作用:

@Html.DropDownListFor(m => m.LabId, new SelectList(Model.Lab, "Id", "Name"), 
    "---- Select----", new { @class = "selectpicker" } )

是否可以绑定@Html.DropDownListFor直接来自模型不使用 Viewbag 或任何额外的方法 in the Controller in ASP.NET MVC5?您能否举一些例子来最好地执行此操作?


强类型视图模型方法不使用像 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 属性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 ASP.NET MVC5 中绑定 @Html.DropDownListFor 的最佳方法是什么? 的相关文章

随机推荐