这让我疯狂。在使用cont
记录填充列表后,它会发生变化
所以每个价值都是一样的。该值是最后一条记录中的值。
public ActionResult Index()
{
var cont = db.AspNetUsers.ToList();
var list = new List<SelectListItem> ();
SelectListItem ctr = new SelectListItem();
foreach (var item in cont)
{
ctr.Text = item.Email;
ctr.Value = item.Email;
list.Add(ctr);
//last iteration everything is fine, every element of list holds
//another value
}
// debugger shows that all list elements have the same text and value
TempData["list"] = list;
return View();
}
谢谢!
答案 0 :(得分:3)
这是因为您每次迭代都要添加和编辑相同的对象ctr
。这是一个引用类型,因此每次执行ctr.*something*
而不初始化ctr
的新对象时,您也会编辑相同的文件。
foreach (var item in cont)
{
SelectListItem ctr = new SelectListItem();
ctr.Text = item.Email;
ctr.Value = item.Email;
list.Add(ctr);
}
将SelectListItem ctr = new SelectListItem();
移至列表
答案 1 :(得分:1)
您需要在foreach循环中实例化 SelectListItem ctr = new SelectListItem(),否则您将多次在列表中添加相同的对象,并且当您更改对象的值时您将更改整个列表的值。