Asp.net mvc 将集合作为模型传递而不使用有序索引

Asp.net mvc 将集合作为模型传递而不使用有序索引,asp.net-mvc,razor,asp.net-mvc-5,Asp.net Mvc,Razor,Asp.net Mvc 5,我有一个对象列表,我正在将它传递给视图,它被正确渲染。 当我提交这份表格时,我得到的是相同的模型。一切正常。 不幸的是,当我决定使用jquery动态删除一些记录时,它看起来是这样的 在提交表格后,我得到的是只有两个项目的列表。这可能是因为索引不是自然顺序(0,1,3而不是0,1,2)。 我可以做些什么来轻松修复它(不使用jquery更改输入,smth服务器端)?我尝试将数组更改为List或Ienumerable,但仍然没有更改。我知道我可以将所有内容打包并作为json发送,或者只是阅读form

我有一个对象列表,我正在将它传递给视图,它被正确渲染。

当我提交这份表格时,我得到的是相同的模型。一切正常。 不幸的是,当我决定使用jquery动态删除一些记录时,它看起来是这样的 在提交表格后,我得到的是只有两个项目的列表。这可能是因为索引不是自然顺序(0,1,3而不是0,1,2)。
我可以做些什么来轻松修复它(不使用jquery更改输入,smth服务器端)?我尝试将数组更改为List或Ienumerable,但仍然没有更改。我知道我可以将所有内容打包并作为json发送,或者只是阅读formCollection,但我想先问一下这里是否有其他解决方案。

您需要为
Index
属性添加一个输入,该属性允许您发回非连续索引器。索引的值必须与集合索引器匹配。比如说

for(int i = 0; i < model.tagList.Count; i++)
{
  @Html.TextBoxFor(m => m.tagList[i].Name);
  <input type="hidden" name="tagList.Index" value="@i" />
}
for(int i=0;im.tagList[i].Name);
}

您是使用
循环还是自定义
编辑器或模板来呈现集合?我担心它不起作用。我已经添加了索引属性,在razor视图中添加了html隐藏助手,它输出和您编写的html非常相同的html。尽管如此,还是有同样的行为。还有,我不明白为什么在你看来这会起作用?我的意思是,这不只是一个附加属性吗?是的,但是对于非连续索引器,
DefaultModelBinder
会失败,除非存在
Index
属性。因此,您可以拥有
,它将发回一个包含2项的集合,您说您“添加了索引属性”。如果您是针对您的模型,则不要(
Index
IList
的属性)隐藏输入的名称应该是
tagList.Index
,而不是
tagList[@i]。Index
。此外,一切都是正确的。有关更多详细信息,请参阅的非顺序索引部分。