我正在扩展一个枚举,并且给定以下代码,selectListItems
是一个SelectListItems的通用列表,它具有我的枚举的所有正确值。
第一个foreach循环工作正常。但是,当我创建实际的SelectList并传入selectListItems
时,所有值都将丢失。我怎样才能保持这些价值不变?
foreach (SelectListItem item in selectListItems)
{
string tex = item.Text;
string val = item.Value;
string sel = item.Selected.ToString();
}
SelectList selectList = new SelectList(selectListItems);
foreach (SelectListItem slid in selectList)
{
string tex = slid.Text;
string val = slid.Value;
string sel = slid.Selected.ToString();
}
答案 0 :(得分:53)
您需要更改构建它的行,告诉它在哪里查找值。在你的情况下,它将是:
SelectList selectList = new SelectList(selectListItems, "Value", "Text");
但这不会延续所选项目。在这种情况下,您需要确定哪个项目应该是所选项目,并通过第四个参数传递它的值。
以下是一个例子:
List<SelectListItem> items = new List<SelectListItem>();
items.Add(new SelectListItem() { Text = "Test1", Value = "1", Selected = false });
items.Add(new SelectListItem() { Text = "Test8", Value = "8", Selected = true });
items.Add(new SelectListItem() { Text = "Test3", Value = "3", Selected = false });
items.Add(new SelectListItem() { Text = "Test5", Value = "5", Selected = false });
SelectList sl = new SelectList(items, "Value", "Text", "8");
您可能还想查看可能有帮助的this SO thread。
编辑:刚刚看到您的评论,但它不起作用,因为默认情况下知道查找Text
和Value
字段并不够智能。您可以将它传递给一种对象,它可以通过定义要映射到Text
和Value
属性的属性来绑定它。