2011-04-03 79 views
1

我正在做的事情,雖然我通常沒有問題與C#我有一個大腦崩潰,有點卡...MVC C#添加項目到列表<>內foreach

在我的MVC應用程序我有一個負責管理谷歌地圖的一些標記控制器(如下)

public ActionResult GetMarkers() 
    { 
     MarkerList markers = getMarkersForMap(); 

     return Json(markers, JsonRequestBehavior.AllowGet); 

    } 

    public MarkerList getMarkersForMap() 
    { 
     MarkerList ml = new MarkerList(); 

     foreach (var shop in dirRepo.getAllShops()) 
     { 
      Marker marker = new Marker 
      { 
       html = shop.ShopName, 
       lat = shop.Lat, 
       lng = shop.Lng, 
       label = shop.DirectoryID.ToString() 
      }; 

      ml.markers.Add(marker); // <<<< Object ref not set to an instance of an object 

     } 
     return m;    
    } 

我也有一個標記控制器如下:

public class MarkerList 
{ 
    public List<Marker> markers { get; set; } 
} 

public class Marker 
{ 
    public string lat { get; set; } 
    public string lng { get; set; } 
    public string html { get; set; } 
    public string label { get; set; } 
} 

數據被填充在foreach沒問題, 但是我要 將多個標記添加到列表中,以便我可以將它們傳遞迴調用函數,並繼續在我的查看頁面中顯示結果。我可以添加單件沒有問題,這樣做

return new MarkerList {markers = new List<Marker> {marker}}; 

但如何多個項目?

回答

1

您需要在MarkerList中使用初始化列表才能使用它。您可以在默認的MarkerList構造函數中初始化它。

public class MarkerList 
{ 
    public List<Marker> markers { get; set; } 

    public MarkerList() 
    { 
     markers = new List<Marker>(); 
    } 
} 

然後,你確定內部列表總是被初始化。

答案:爲什麼要將列表封裝在僅包含此列表的對象中? MarkerList課目前沒有任何好處。除非僅縮短問題需求,否則最好刪除此課程並直接使用List<Marker>

+0

但是,從某人else示例中找到一些黑客和斜槓,直接使用列表是有意義的。 – Andrew 2011-04-03 19:20:14

0

ml.markers爲空,因爲您正在使用自動屬性(無後備存儲)。例如,您需要在ctor中初始化它。

但有一件事看起來很奇怪。首先,爲什麼標記是公開的,而不是以大寫字母開頭。而且更重要。訪問內部列表時,MarkersList類是什麼?現在它沒有多大意義。將內部標記列表設爲private/protected,並將AddMarker方法添加到MarkersList。或者只是在控制器中使用List並將其返回。