2016-04-25 5 views
0

Ich versuche Listenelemente in meiner MVC-Ansicht, nach diesem Beispiel: Model Binding to a List. Ich verwende MVC 5. Es Beispiel sagt, dies zu tun:Wie indexiere ich eine ICollection <T>, wie sie mir in diesem Beispiel sagen?

<%@ Page Inherits="ViewPage<IList<Book>>" %> 
<% for (int i = 0; i < 3; i++) { %> 
    <%: Html.EditorFor(m => m[i]) %> 
<% } %> 

Ich versuche, dies zu tun:

for (int i = 0; i < Model.SubmissionTypesSelected.Count(); i++) 
{ 
    Html.EditorFor(m => m.SubmissionTypesSelected[i]); 
} 

SubmissionTypesSelected ist wie folgt definiert:

public ICollection<PTSubTypeSelected> SubmissionTypesSelected { get; set; } 

I Erhalten Sie diese Nachricht:

Kann keine Indizierung auf ein Expre anwenden ssion vom Typ ‚System.Collections.Generic.ICollection‘

+4

Warum verwenden Sie nicht stattdessen eine 'foreach'? –

+5

In dem Beispiel haben Sie 'IList '. In Ihrem Code gibt es 'ICollection '. Das ist nicht das Gleiche. IList ist indexierbar. ICollection ist nicht. Auch, was Yacoub sagte. Iterating 0..Count === foreach, und ICollection ist "foreachable" (wie jedes IEnumerable ist) – quetzalcoatl

+0

Dies ist Teil eines größeren Problems. Ich habe Sammlungen verschachtelt und kann die Ergebnisse nicht aus der innersten Sammlung abrufen. Ich habe versucht, die Indexmethode zu verwenden, um zu sehen, ob ich das Problem beheben kann. –

Antwort

0

Was ist, wenn Sie dies tun, geschieht:

var typesArray = Model.SubmissionTypesSelected.ToArray(); 
for (int i = 0; i < typesArray.Length; i++) 
{ 
    Html.EditorFor(m => typesArray[i]); 
} 
+0

Nur versuchen, Ihre Lösung direkt zu implementieren, ohne zu verstehen, warum Sie Indizierung verwenden müssen. –

0

Versuchen CopyTo(Array, Int32) und dann wie gewohnt mit einer Reihe tun würde iterieren weiterhin verwenden.

1

Der Fehler ist selbsterklärend; Sie können die Indexierung nicht für eine verwenden, da sie so entworfen wurde, dass sie den Inhalt einer Sammlung von Elementen ändern kann, nicht ihre Reihenfolge. Ändern Sie es zu einem IList{T} ist eine einfache Antwort, wie das Beispiel, das Sie verknüpft haben.

MVC muss Indizes in HTML hinzugefügt haben, damit es herausfinden kann, welcher Eigenschaftswert zu welchem ​​Element in einer Sammlung beim Postback gehört. Die EditorFor wird dies für Sie tun, wenn Sie es direkt an eine IEnumerable übergeben. So können Sie genau dies tun:

Html.EditorFor(m => m.SubmissionTypesSelected); 

Es wird eine Schleife durch jedes Element, erzeugen einen Index für Sie, und übergeben Sie die einzelnen Artikel in den Editor-Vorlage.

Verwandte Themen