2016-04-25 8 views
0

MVCビューでリスト項目を試しています。この例は次のとおりです:Model Binding to a List。私は例をMVC 5が使用していますことは、これを行うには言う:この例でICollection <T>のようにインデックスを作成する方法を教えてください。

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

私はこれをやろうとしている:

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

SubmissionTypesSelected次のように定義されています。私は

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

expreに索引付けを適用できませんあなたがこれを行うとどうなりますかタイプのssion「System.Collections.Generic.ICollection」

+4

代わりに 'foreach'を使用してみませんか? –

+5

この例では、 'IList 'があります。あなたのコードには 'ICollection 'があります。それは同じではありません。 IListはインデックス可能です。 ICollectionはそうではありません。また、ヤコブは言った。 0.Count === foreachを繰り返し、ICollectionは "foreachable"です(すべてのIEnumerableがそうであるように) – quetzalcoatl

+0

これは大きな問題の一部です。私はネストされたコレクションを持っており、最も内側のコレクションから結果を得ることはできません。インデックスメソッドを使用して問題を解決できるかどうかを確認しようとしていました。 –

答えて

0

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

なぜインデックス作成を使用する必要がなくても、ソリューションを直接実装しようとしています。 –

0

CopyTo(Array, Int32)を使ってみて、あなたは、通常の配列で行うように反復し続けます。

1

エラーは一見自明です。 ICollection{T}でインデックスを使用することはできません。要素の順序ではなく要素のコレクションの内容を変更できるように設計されているからです。 IList{T}に変更するのは、あなたがリンクした例のように簡単な答えです。

MVCでは、HTMLにインデックスを追加する必要があるため、ポストバック時にどのプロパティ値がコレクションのどのアイテムと一致するかを把握することができます。もしIEnumerableを直接渡すと、EditorForはこれを行います。だから、ちょうどこの操作を行うことができます。

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

それは各項目をループ、あなたのためのインデックスを生成して、エディタのテンプレートに、個々のアイテムを渡します。

関連する問題