无法在 ASP.NET MVC 中初始化 SelectList

use*_*192 2 c# asp.net-mvc-4

我正在努力使用 ASP.NET MVC 应用程序。目前,我正试图让一个复选框列表工作。为了做到这一点,我使用了这篇博文。我觉得我很接近。但是,出于某种原因,我的所有复选框列表项都显示System.Web.Mvc.SelectListItem. 我不理解为什么。我的模型代码如下所示:

public SelectList AvailableTypeList { get; set; }
public IEnumerable<string> SelectedTypes { get; set; }

public void Initialize()
{
  List<SelectListItem> items = new List<SelectListItem>();
  foreach (var availableType in await AvailableType.LoadFromDatabaseAsync())
  {
    SelectListItem listItem = new SelectListItem
    {
      Text = availableType.Name,
      Value = availableType.Id.ToString()
    };
    items.Add(listItem);
  }
  AvailableTypeList = new SelectList(items);

  int i = 0;
}
Run Code Online (Sandbox Code Playgroud)

我有两个断点。一个设置在说的那一行,items.Add(listItem)另一个设置在int i = 0;

当第一个断点跳闸时,TextValue属性正是我所期望的。但是,当第二个断点触发时,我在监视窗口中注意到AvailableTypeList .FirstOrDefault().Text“System.Web.Mvc.SelectListItem”。为什么?

我不明白为什么要重置对象的TextValue属性SelectListItem。我究竟做错了什么?

Chr*_*tos 5

我在监视窗口中注意到 AvailableTypeList .FirstOrDefault().Text 是“System.Web.Mvc.SelectListItem”。为什么?

这里,

SelectListItem listItem = new SelectListItem
{
  Text = availableType.Name,
  Value = availableType.Id.ToString()
};
Run Code Online (Sandbox Code Playgroud)

public SelectList( IEnumerable items, string dataValueField, string dataTextField ) 你创建一个类型的对象,listItem然后在这里:

 items.Add(listItem);
Run Code Online (Sandbox Code Playgroud)

您将其添加到对象列表中SelectListItem

另一方面,在以下行中:

AvailableTypeList = new SelectList(items);
Run Code Online (Sandbox Code Playgroud)

SelectList使用这些项目创建一个新对象。在SelectList列表中的项目将附加到SelectList. 由于项目中的对象类型是SelectListItem,这将是SelectList您创建的项目类型。

具体来说,您使用了以下构造函数SelectList

public SelectList(IEnumerable items)
Run Code Online (Sandbox Code Playgroud)

正如MSDN中所述:

使用列表的指定项初始化 SelectList 类的新实例。

关于这一点:

我不明白为什么要重置 SelectListItem 对象的 Text 和 Value 属性。我究竟做错了什么?非常感谢您提供的任何帮助。

发生这种情况是因为您没有使用正确的构造函数,如下所示:

public SelectList(
    IEnumerable items,
    string dataValueField,
    string dataTextField
)
Run Code Online (Sandbox Code Playgroud)

您必须明确说明,这是dataValueFielddataTextField。如果您使用上述内容,如下所示:

AvailableTypeList = new SelectList(items,"Value","Text");
Run Code Online (Sandbox Code Playgroud)