2016-08-24 12 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を作成する必要があります。つまり、すべての追加に*同じ* 'SelectListItem'を使用しており、ループの繰り返しごとにプロパティを変更しています。 –

+0

ありがとうございます! –

答えて

3

これは、同じオブジェクトを追加して編集するたびに、同じオブジェクトctrが繰り返されるためです。 参照タイプですので、ctr.*something*を実行するたびに、新しいオブジェクトを初期化せずに同じものを編集することになります。リストに

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

あなたが、そうでなければ、リスト内で複数回同じオブジェクトを追加する予定、foreachループ内のSelectListItemのCTR =新しいSelectListItem()をインスタンス化する必要があるとオブジェクトの値を変更すると、リスト全体の値が変更されます。

+0

ありがとう! –

関連する問題