2013-02-26 23 views
0

我在下面的代碼中有問題。以下是我的模型代碼在C#中的列表問題 - MVC

public class Comments 
{ 
    public string displayComments { get; set; } 

    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")] 
    public DateTime? dTime { get; set; } 

    public int airPortId { get; set; } 
} 

public class LstComments 
{ 
    private List<Comments> _lstcomment = new List<Comments>(); 

    public List<Comments> lstCommet 
    { 
     get 
     { 
      return _lstcomment; 
     } 
     set 
     { 
      _lstcomment = value; 
     } 
    } 
} 

並在mycontroller中從EF獲取數據並將其添加到For循環的屬性中。下面的代碼

Comments com = new Comments(); 
LstComments savedComments = new LstComments(); 

AirportEntities airPortEntity = new AirportEntities(); 

var userComments = from c in airPortEntity.AirportComments 
        select c; 

//List<Comments> savedComments = new List<Comments>(); 

foreach (var item in userComments) 
{ 
    com.displayComments = item.Comments; 
    com.dTime = item.Time; 

    savedComments.lstCommet.Add(com);    
} 

我的問題是我的整個列表是越來越有相同的記錄(最近添加的數據)

對於如更新。 foreach 3rd timn用第三項數據更新列表中第一項和第二項第三項。

我在做什麼錯了?

+0

呸......你有一些嚴重的命名約定事項:( – musefan 2013-02-26 14:01:01

回答

5

您實例Comments外循環。這意味着堆中有相同的註釋對象的引用。你需要做

Comments com = new Comments();裏面的foreach。這將在每次迭代中創建一個單獨的實例,而不僅僅是爲一個實例提供新的值。

+0

謝謝。TAT幫助 – user2067567 2013-02-26 14:05:06

+0

@ user2067567如果我們的答案的人幫助你,請點擊白色勾選答案旁邊。它會變成綠色,這是接受的答案是正確的,所以有類似問題的未來用戶會知道哪一個爲你工作 – 2013-02-26 14:22:17

+0

是的史蒂夫,我試圖立即標記它,但規則是,我需要等待一段時間。現在:) – user2067567 2013-02-26 14:26:40

3

您需要每次在foreach中實例化Comments com = new Comments();。至於現在你只是重寫對同一個對象的引用。

或者是更好,因爲重寫的foreach:

foreach (var item in userComments) 
    { 
     savedComments.lstCommet.Add(
      new Comments() 
      { 
       com.displayComments = item.Comments, 
       com.dTime = item.Time 
      }); 
    } 
+0

感謝您的快速答覆。TAT幫助 – user2067567 2013-02-26 14:08:05