MVC C # Добавление элементов в список <> внутри foreach - PullRequest
1 голос
/ 03 апреля 2011

Я работаю над чем-то, и, хотя у меня обычно нет проблем с c #, у меня случился обвал мозга и я немного застрял ...

В моем приложении MVC у меня есть контроллер, который управляет некоторыми маркерами для Google Maps (следующим образом)

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

а как насчет нескольких предметов ??

Ответы [ 2 ]

1 голос
/ 03 апреля 2011

Вы должны иметь инициализированный список в вашем MarkerList, чтобы использовать его. Вы можете инициализировать его в конструкторе MarkerList по умолчанию.

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

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

Тогда вы уверены, что внутренний список всегда инициализируется.

Кстати: Почему вы хотите инкапсулировать свой список в объекте, который содержит только этот список? Там нет никакого преимущества класса MarkerList сейчас. Если это не сокращено только для нужд вопроса, будет лучше удалить этот класс и использовать List<Marker> напрямую.

0 голосов
/ 03 апреля 2011

ml.markers имеет значение null, так как вы используете автоматические свойства (без резервного хранилища).Например, вам нужно инициализировать его в ctor.

Но одна вещь выглядит странно.Во-первых, почему маркеры общедоступны и не начинаются с заглавной буквы.И более важно.Что такое класс MarkersList для доступа к внутреннему списку?Сейчас это не имеет особого смысла.Либо сделайте внутренний список маркеров закрытым / защищенным и добавьте метод AddMarker в MarkersList.Или просто используйте List в контроллере и верните его.

...