如何在 SelectList 中使用 Display Text 属性

How to use Display Text property in SelectList

使用 SelectListValueText 属性是否有比我在以下视图中所做的更好的方法?我觉得我做了一些额外的工作。

注意:我知道使用 ValueText 下拉菜单的其他方法。这个问题仅与如何在使用 SelectList

时实现相同目标有关
...
var customersList = _context.Customers.Select(c => new SelectListItem { Value = c.LastName, Text = c.FullName });

MyViewModel.lstCustomers = new SelectList(customersList , "Value", "Text");
...
return View(MyViewModel);

我找到了类似的方法here and here

用于生成 <select> 元素(@Html.DropDownListFor() 等)的 HtmlHelper 方法期望将 IEnumerable<SelectListItem> 作为参数之一,因此您的 lstCustomers 应该也是IEnumerable<SelectListItem>

public IEnumerable<SelectListItem> lstCustomers { get; set; }

你第一行代码

var customersList = _context.Customers.Select(c => new SelectListItem { Value = c.LastName, Text = c.FullName });

已经生成了,所以只需要

MyViewModel.lstCustomers = customersList;

您使用 new SelectList(customersList , "Value", "Text"); 只是从第一个 IEnumerable<SelectListItem> 创建另一个相同的 IEnumerable<SelectListItem> 并且是不必要的额外开销。 (SelectList IEnumerable<SelectListItem> 并且只是它的包装器以提供构造函数来生成集合)。

如果您想使用 SelectList 构造函数,请将您的代码更改为

var customersList = _context.Customers;
MyViewModel.lstCustomers = new SelectList(customersList , "LastName", "FullName");

两者将生成相同的输出。这些方法之间的区别在于 SelectList 构造函数使用反射来确定将哪些属性用于选项值和显示文本,因此速度稍慢,并且它使用 'magic strings' 因此不是强类型的。好处是它不那么冗长。