如何在SelectList中使用Display Text属性

时间:2017-08-14 21:14:05

标签: c# linq asp.net-core 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);

我找到了类似的方法herehere

1 个答案:

答案 0 :(得分:1)

用于生成HtmlHelper元素(<select>等)的@Html.DropDownListFor()方法需要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>,并且是不必要的额外开销。 (SelectList IEnumerable<SelectListItem>,它只是一个包装器,可以提供构造函数来生成集合。

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

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

两者都会生成相同的输出。方法之间的区别在于SelectList构造函数使用反射来确定用于选项值和显示文本的属性,因此速度稍慢,并且它使用了“魔术字符串”。所以不是强类型。好处是它的冗长一点点。