ASP.Net MVC SelectLIst和List <selectlistitems> </selectlistitems>的问题

时间:2010-06-30 16:00:14

标签: c# asp.net-mvc selectlist

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

1 个答案:

答案 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

编辑:刚刚看到您的评论,但它不起作用,因为默认情况下知道查找TextValue字段并不够智能。您可以将它传递给一种对象,它可以通过定义要映射到TextValue属性的属性来绑定它。