2016-08-24 4 views
0

Это просто заводит меня в орехи. После заполнения списка с cont записей он меняет , поэтому каждое значение будет одинаковым. Значение - это значение из последней записи.ASP.NET - последний элемент целиком появляется во всем списке

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* без инициализации нового объекта для ctr, вы также будете редактировать его.

foreach (var item in cont) 
{ 
    SelectListItem ctr = new SelectListItem(); 
    ctr.Text = item.Email; 
    ctr.Value = item.Email; 
    list.Add(ctr); 
} 

Move SelectListItem ctr = new SelectListItem(); в список

+0

большое спасибо! это сработало –

+0

@AleksanderDudek - добро пожаловать :) –

1

Вам нужно создать экземпляр SelectListItem CTR = новый SelectListItem() внутри цикла Еогеасп, в противном случае вы будете добавлять один и тот же объект в списке несколько раз, и при изменении значения объекта вы измените значение всего списка.

+0

большое спасибо! –