我在MVC视图中尝试列表项,遵循此示例:Model Binding to a List。我使用的是MVC 5.例子说这样做:
<%@ 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; }
我收到此消息:
无法将索引应用于&#39; System.Collections.Generic.ICollection&#39;
类型的表达式
答案 0 :(得分:1)
错误有点不言自明;您无法在ICollection{T}
上使用索引,因为它旨在能够修改元素集合的内容,而不是它们的顺序。将其更改为IList{T}
只是一个简单的答案,就像您链接的示例一样。
MVC需要在HTML中添加索引,以便它可以确定哪些属性值与回发中集合中的哪个项目相关。如果您直接将EditorFor
传递给IEnumerable
,Html.EditorFor(m => m.SubmissionTypesSelected);
会为您执行此操作。所以你可以这样做:
local sometable = {
[1] = [2] = "abc",
}
它将遍历每个项目,为您生成索引,并将单个项目传递给您的编辑器模板。
答案 1 :(得分:0)
如果你这样做会发生什么:
var typesArray = Model.SubmissionTypesSelected.ToArray();
for (int i = 0; i < typesArray.Length; i++)
{
Html.EditorFor(m => typesArray[i]);
}
答案 2 :(得分:0)
尝试使用CopyTo(Array, Int32)
,然后继续按照通常使用数组进行迭代。