无法在 ASP.NET MVC 中初始化 SelectList
Unable to initialize SelectList in ASP.NET MVC
我正在努力使用 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
属性正是我所期望的。但是,当第二个断点触发时,我注意到手表 window 中 AvailableTypeList .FirstOrDefault().Text
是 "System.Web.Mvc.SelectListItem"。为什么?
我不明白为什么要重置 SelectListItem
对象的 Text
和 Value
属性。我究竟做错了什么?
I notice in the watch window that AvailableTypeList
.FirstOrDefault().Text is "System.Web.Mvc.SelectListItem". Why?
这里,
SelectListItem listItem = new SelectListItem
{
Text = availableType.Name,
Value = availableType.Id.ToString()
};
public 选择列表(
IE可数项目,
字符串数据值字段,
字符串数据文本字段
)
您创建了一个 listItem
类型的对象,然后在此处:
items.Add(listItem);
您将其添加到 SelectListItem
个对象的列表中。
另一方面,在以下行中:
AvailableTypeList = new SelectList(items);
您使用这些项目创建了一个新的 SelectList
对象。在 SelectList
中,您列表中的项目将附加在 SelectList
中。由于项目中的对象类型是 SelectListItem
,这将是您创建的 SelectList
中的项目类型。
具体来说,您使用了 SelectList
的以下构造函数:
public SelectList(IEnumerable items)
如 MSDN 中所述:
Initializes a new instance of the SelectList class by using the
specified items for the list.
对此:
I do not understand why the Text and Value properties of the
SelectListItem objects are being reset. What am I doing wrong? Thank
you SO much for any help you can provide.
发生这种情况是因为您没有使用正确的构造函数,如下所示:
public SelectList(
IEnumerable items,
string dataValueField,
string dataTextField
)
你要明确说明,就是dataValueField
和dataTextField
。如果你使用上面的,如下所示:
AvailableTypeList = new SelectList(items,"Value","Text");
用一个项目创建它:
SelectList docs = new SelectList(new[] { new SelectListItem { Text = "Please Select...", Value = "error", Selected = true } });
var list = new SelectList(Enumerable.Empty<SelectListItem>());
我正在努力使用 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
属性正是我所期望的。但是,当第二个断点触发时,我注意到手表 window 中 AvailableTypeList .FirstOrDefault().Text
是 "System.Web.Mvc.SelectListItem"。为什么?
我不明白为什么要重置 SelectListItem
对象的 Text
和 Value
属性。我究竟做错了什么?
I notice in the watch window that AvailableTypeList .FirstOrDefault().Text is "System.Web.Mvc.SelectListItem". Why?
这里,
SelectListItem listItem = new SelectListItem
{
Text = availableType.Name,
Value = availableType.Id.ToString()
};
public 选择列表(
IE可数项目,
字符串数据值字段,
字符串数据文本字段
)
您创建了一个 listItem
类型的对象,然后在此处:
items.Add(listItem);
您将其添加到 SelectListItem
个对象的列表中。
另一方面,在以下行中:
AvailableTypeList = new SelectList(items);
您使用这些项目创建了一个新的 SelectList
对象。在 SelectList
中,您列表中的项目将附加在 SelectList
中。由于项目中的对象类型是 SelectListItem
,这将是您创建的 SelectList
中的项目类型。
具体来说,您使用了 SelectList
的以下构造函数:
public SelectList(IEnumerable items)
如 MSDN 中所述:
Initializes a new instance of the SelectList class by using the specified items for the list.
对此:
I do not understand why the Text and Value properties of the SelectListItem objects are being reset. What am I doing wrong? Thank you SO much for any help you can provide.
发生这种情况是因为您没有使用正确的构造函数,如下所示:
public SelectList(
IEnumerable items,
string dataValueField,
string dataTextField
)
你要明确说明,就是dataValueField
和dataTextField
。如果你使用上面的,如下所示:
AvailableTypeList = new SelectList(items,"Value","Text");
用一个项目创建它:
SelectList docs = new SelectList(new[] { new SelectListItem { Text = "Please Select...", Value = "error", Selected = true } });
var list = new SelectList(Enumerable.Empty<SelectListItem>());