2016-08-24 183 views
0

這只是讓我瘋狂。填入cont的記錄後,記錄更改爲 ,因此每個值都是相同的。該值是最後一條記錄中的值。ASP.NET - Foreach最後一個元素出現在整個列表中

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(); 
} 

謝謝!

+1

您需要爲每個要添加的項目創建一個新的'SelectListItem'。實際上,每次添加都使用* same *'SelectListItem',並且只是在循環的每次迭代中更改屬性。 –

+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();到列表

+0

非常感謝你!它的工作 –

+0

@AleksanderDudek - 歡迎您:) –

1

您需要實例化SelectListItem CTR =新SelectListItem() foreach循環內,否則就會在列表中多次被添加相同的對象,當你改變對象的值時,你將改變整個列表的值。

+0

非常感謝你! –

相關問題