Benutzer mit den meisten Antworten
ASP.NET MVC: Daten aus dem Model holen

Frage
-
Hi!
Ich habe eine Model-Klasse
public class AstroDataSet { public IEnumerable<GeoPosition> ListGeoPositions { get; set; } public int SelectedGeoPosition { get; set; } }
In der Controller-Action übergebe ich ein Objekt dieser Klasse an den View.
public ActionResult Index() { var gps = new GeoPositions(); AstroDataSet ads = gps.GetAstroDataSet(); return View("Index", ads); }
Im Konstruktor von GeoPosition wird die List ListGeoPositions mit ein paar Datensätzen gefüllt.
Im View deklariere ich den Typ des Models:@model TestAspNet.Models.AstroDataSet
Im View kann ich zwar durch die Liste AstroDataSet.ListGeoPositions iterieren mit@foreach (var item in Model.ListGeoPositions) {...}
, aber ich kann nicht auf ein einzelnes Item dieser Liste zugreifen mit@Model.ListGeoPositions[2]
bzw.
@Model.ListGeoPositions[2].Id
.
Wie kann ich in der View auf einzelne Elemente der Liste zugreifen um sie darzustellen?
Grüße von Frank!
Antworten
-
Hallo Frank,
auf den ersten Blick würde ich sagen, das ein IEnumerable keinen Indexer hat (definiert lediglich GetEnumerator). Ein spezifisches Objekt kann IEnumerable implementieren und einen Indexer haben, z.B. eine List<T>.
Da der Name "ListGeoPositions" darauf hindeutet, dass es sich um eine List<GeoPosition> handelt, würde ich als Type in deiner AstroDataSet-Klasse statt eines IEnumerable<GeoPosition> eine List<GeoPosition> für die Eigenschaft ausprobieren:
public class AstroDataSet { public List<GeoPosition> ListGeoPositions { get; set; } public int SelectedGeoPosition { get; set; } }
Falls die Eigenschaft auch andere IEnumerables<T> (also keine List<T>) annehmen kann, würde ich vielleicht der AstroDataSet-Klasse einen Indexer verpassen, der für alle IEnumerables<T> in ListGeopPositions einen geeigneten Wert bereitstellt.
Gruß
Alle Antworten
-
Hallo Frank,
auf den ersten Blick würde ich sagen, das ein IEnumerable keinen Indexer hat (definiert lediglich GetEnumerator). Ein spezifisches Objekt kann IEnumerable implementieren und einen Indexer haben, z.B. eine List<T>.
Da der Name "ListGeoPositions" darauf hindeutet, dass es sich um eine List<GeoPosition> handelt, würde ich als Type in deiner AstroDataSet-Klasse statt eines IEnumerable<GeoPosition> eine List<GeoPosition> für die Eigenschaft ausprobieren:
public class AstroDataSet { public List<GeoPosition> ListGeoPositions { get; set; } public int SelectedGeoPosition { get; set; } }
Falls die Eigenschaft auch andere IEnumerables<T> (also keine List<T>) annehmen kann, würde ich vielleicht der AstroDataSet-Klasse einen Indexer verpassen, der für alle IEnumerables<T> in ListGeopPositions einen geeigneten Wert bereitstellt.
Gruß