我正在努力使用ASP.NET MVC应用程序。目前,我正试图使一个复选框列表起作用。为了尝试执行此操作,我正在使用此blog post。我觉得我接近了。但是,由于某些原因,我的所有复选框列表项都显示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;
}
我有两个断点。一组在表示
items.Add(listItem)
的行上,另一组在int i = 0;
的行上。当第一个断点跳闸时,
Text
和Value
属性正是我所期望的。但是,当第二个断点跳闸时,我在监视窗口中注意到AvailableTypeList .FirstOrDefault().Text
是“ System.Web.Mvc.SelectListItem”。为什么?我不明白为什么要重置
Text
对象的Value
和SelectListItem
属性。我究竟做错了什么? 最佳答案
我在监视窗口中注意到AvailableTypeList
.FirstOrDefault()。Text为“ System.Web.Mvc.SelectListItem”。为什么?
这里,
SelectListItem listItem = new SelectListItem
{
Text = availableType.Name,
Value = availableType.Id.ToString()
};
公共SelectList(
IEnumerable项目,
字符串dataValueField,
字符串dataTextField
)
您创建一个
listItem
类型的对象,然后在这里: items.Add(listItem);
您将其添加到
SelectListItem
objcets列表中。另一方面,在以下行中:
AvailableTypeList = new SelectList(items);
您使用这些项目创建一个新的
SelectList
对象。在SelectList
中,列表中的项目将附加在SelectList
中。由于项目中对象的类型是SelectListItem
,因此这就是您创建的SelectList
中项目的类型。具体来说,您使用了
SelectList
的以下构造函数:public SelectList(IEnumerable items)
如MSDN中所述:
通过使用初始化SelectList类的新实例。
指定列表中的项目。
关于此:
我不明白为什么该广告的Text和Value属性
SelectListItem对象正在重置。我究竟做错了什么?谢谢
您将竭诚为您提供任何帮助。
发生这种情况是因为您没有使用正确的构造函数,如下所示:
public SelectList(
IEnumerable items,
string dataValueField,
string dataTextField
)
您必须明确声明
dataValueField
和dataTextField
。如果使用上面的方法,如下所示:AvailableTypeList = new SelectList(items,"Value","Text");