Ich versuche zu lernen, wie ich eine IEnumerable LINQ-Sammlung an einen Repeater binden kann

8

Ich habe eine IEnumerable-Liste von Rennfahrern erstellt, die LINQ aus einem String-Array wie folgt verwenden:

%Vor%

Ich behalte es einfach für den Moment.

Ich binde es dann an eine ASP.NET GridView wie folgt:

%Vor%

Das funktioniert gut. Jetzt möchte ich die gleiche Ausgabe (Ergebnis) nehmen und sie an einen Repeater binden, aber egal, was ich versuche, ich kann den Repeater nicht zum Laufen bringen und ich denke, ich vermisse etwas grundlegendes Verständnis von LINQ und wie es mit ASP.NET funktioniert .

Unten ist die vollständige Aspx-Seite, um zu zeigen, wo ich bisher hingekommen bin. Kann jemand (sanft wenn möglich) mich zurück auf den Weg führen?

%Vor%

Ich verwende den folgenden Code, um das Ergebnis an den Repeater zu binden:

%Vor%

Ich erhalte den folgenden Fehler, wenn ich versuche, die Seite mit dem Repeater in:

auszuführen

Ausnahmedetails: System.Web.HttpException: DataBinding: 'System.String' enthält keine Eigenschaft mit dem Namen 'Treiber'.

    
Ian Roke 06.05.2009, 20:26
quelle

7 Antworten

9

Sie erhalten eine Aufzählung von Strings ohne Namen zurück. Wenn Sie den Treiber für den Eigenschaftennamen verwenden möchten, können Sie einen anonymen Typ festlegen und sagen:

%Vor%

machen Sie dann die Datenbindung.

Ich glaube, Sie können auch Eval(".") , um das Objekt selbst und nicht eine Eigenschaft zu bewerten. Wie mehrere Personen unten gesagt haben, können Sie <%# Container.DataItem %> verwenden.

    
Orion Adrian 06.05.2009, 20:30
quelle
4

Ändern Sie <%# Eval("driver") %> in

%Vor%     
Mehrdad Afshari 06.05.2009 20:32
quelle
1

probiere

aus %Vor%

Das Eval sucht nach einer Eigenschaft mit dem Namen Treiber, aber Sie haben den aktuellen Treibernamen als Zeichenfolge. Es wäre, als würde man "drivername" .DriverName aufrufen. Die Aufzählung Ihrer Sammlung arbeitet mit den tatsächlichen Elementen. Wenn Sie tatsächlich eine Sammlung wie IList-Treiber hätten, dann würde das funktionieren.

    
Joshua Belden 06.05.2009 20:32
quelle
1

Ich weiß, das ist eine alte Frage, aber ich wollte darauf hinweisen, dass ein String-Array bereits IEnumerable<string> ist und Sie könnten das Array direkt mit dem Repeater verbinden, indem Sie Mehrdads Antwort verwenden:

%Vor%     
Jamie Ide 17.02.2010 14:30
quelle
0

Da eine Zeichenfolge keine Eigenschaft namens "Treiber" hat und Sie eine Liste von Zeichenfolgen verwenden, funktioniert dies nicht. Ersetzen Sie die Eval-Anweisung durch Container.DataItem

    
Jeroen Landheer 06.05.2009 20:32
quelle
0

Bist du sicher, dass es keinen Typ gibt? wie der Code gut aussieht.

Sie können auch neue auswählen {Driver = driver, DriverAge = drivrage, etc ..}

Dann verwenden Sie in Ihrer ASPX-Seite folgendes

%Vor%

hoffe das hilft.

    
DevMania 06.05.2009 20:38
quelle
0

oder einfach <%# Eval("result.Driver") %>

    
ruhrpott 17.02.2010 14:23
quelle

Tags und Links