25

我正在扩展一个枚举,并且给定以下代码,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();
}
4

1 回答 1

54

您需要更改构建它的行以告诉它在哪里查找值。在您的情况下,它将是:

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");

您可能还想查看这个可能有帮助的SO 线程。

编辑:刚刚看到您的评论,它不起作用,因为它不够聪明,不知道默认查找TextandValue字段。Text您可以将对象类型传递给它,它使您能够通过定义映射到和属性的属性来绑定到它Value

于 2010-06-30T16:31:21.210 回答