如何在 SelectList 中使用 Display Text 属性
How to use Display Text property in SelectList
使用 SelectList 的 Value
和 Text
属性是否有比我在以下视图中所做的更好的方法?我觉得我做了一些额外的工作。
注意:我知道使用 Value
和 Text
下拉菜单的其他方法。这个问题仅与如何在使用 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' 因此不是强类型的。好处是它不那么冗长。
使用 SelectList 的 Value
和 Text
属性是否有比我在以下视图中所做的更好的方法?我觉得我做了一些额外的工作。
注意:我知道使用 Value
和 Text
下拉菜单的其他方法。这个问题仅与如何在使用 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' 因此不是强类型的。好处是它不那么冗长。