MVC C# 将项目添加到列表<>在 foreach 内
我正在做一些事情,虽然我通常对 c# 没有任何问题,但我的大脑崩溃了,有点卡住了......
在我的 MVC 应用程序中,我有一个控制器,它管理 Google 地图的一些标记(如下所示)
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}};
,但是多个项目怎么样?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您需要在
MarkerList
中初始化列表才能使用它。您可以在默认的MarkerList
构造函数中初始化它。然后,您确定内部列表始终已初始化。
顺便说一句:为什么要将列表封装在仅包含此列表的对象中?现在
MarkerList
类没有任何好处。除非这只是为了满足问题的需要而缩短,否则最好删除此类并直接使用List
。You need to have initialized list in your
MarkerList
to use it. You can initialize it in the defaultMarkerList
constructor.Then, you are sure the inner list is always initialized.
BTW: Why do you want to encapsulate your list in the object that contains this list only? There's no benefit of the
MarkerList
class now. Unless this is only shortened for question's needs, it'll be better to remove this class and useList<Marker>
directly.ml.markers 为 null,因为您正在使用自动属性(没有后备存储)。例如,您需要在 ctor 中初始化它。
但有一件事看起来很奇怪。首先,为什么标记是公开的并且不以大写字母开头。更重要的是。当您访问内部列表时,MarkersList 类的作用是什么?现在看来没有多大意义。将内部标记列表设置为私有/受保护,并将 AddMarker 方法添加到 MarkersList。或者只是在控制器中使用 List 并返回它。
ml.markers is null because You are using auto properties (without backing store). You need to initialize it in ctor for example.
But one thing looks weird. First why is markers public and not started with capital letter. And more important. What is MarkersList class for when You access inner List? Right now it doesn't make much sense. Either make the inner markerslist private/protected and add AddMarker method to MarkersList. Or just use List in controller and return it.