none
ASP.NET MVC: Daten aus dem Model holen RRS feed

  • 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!

    www.energiewende-mach-ich-selbst.de

    Freitag, 15. Dezember 2017 12:49

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ß


    • Bearbeitet K. Pater Freitag, 15. Dezember 2017 15:20
    • Als Antwort markiert frank me Freitag, 15. Dezember 2017 15:27
    Freitag, 15. Dezember 2017 15:18

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ß


    • Bearbeitet K. Pater Freitag, 15. Dezember 2017 15:20
    • Als Antwort markiert frank me Freitag, 15. Dezember 2017 15:27
    Freitag, 15. Dezember 2017 15:18
  • Herzlichen Dank K.Pater,

    mit List statt IEnumerable funktioniert das Ganze.

    Ich freu mich.
    Grüße!

    • Bearbeitet frank me Freitag, 15. Dezember 2017 15:35
    Freitag, 15. Dezember 2017 15:34