我的模型上有一组对象,我正在使用 EditFor 函数在视图中呈现这些对象,并且我有一个 EditorTemplate 负责实际呈现每个对象。
@Html.EditorFor(model => model.MyObjects)
这已经有一段时间了,当您检查 html 时,我的文本框以模型属性为前缀,然后是它们来自的集合的索引。
<input class="text-box single-line" id="MyObjects_2__SomeProperty"
name="MyObjects[2].SomeProperty" type="Text" value="" />
但是,我最近开始在集合的模型元数据中使用 ShowForEdit 和 ShowForDisplay 属性,如果 ShowForEdit 不正确,我会在编辑器模板的第一行中跳过它。
@if (!ViewData.ModelMetadata.ShowForEdit)
{
return;
}
但是因为这些都在 html 中编入索引,所以当我尝试通过回发将此集合保存回视图模型时,由于依赖于索引编号而失败。当我检查它的值时,我的视图模型中缺少索引后集合中的每个项目。
在这种情况下,它实际上是我要跳过的集合中的第一个项目,因为我不希望它在编辑视图中可见,但正因为如此,当我回发时,html 中的第一个索引是 1(而不是 0就像通常那样),但是当您尝试保存更改时,这是一个问题。在使用 javascript 更改 DOM 时,这也是一个问题。
当 html 表示的集合中的一个或多个索引不存在时,是否有其他人遇到默认模型绑定器读取回发数据的问题?
有处理这个问题的模型绑定器吗?