我的模型上有一个对象集合,我使用 EditFor 函数在视图中渲染这些对象,并且我有一个 EditorTemplate 负责实际渲染每个对象。
@Html.EditorFor(model => model.MyObjects)
这已经运行良好一段时间了,当您检查 html 时,我的文本框以 model 属性为前缀,后面是它们来自的集合的索引。
<input class="text-box single-line" id="MyObjects_2__SomeProperty"
name="MyObjects[2].SomeProperty" type="Text" value="" />
不过,我最近开始在集合的模型元数据中使用 ShowForEdit 和 ShowForDisplay 属性,并且在编辑器模板的第一行中,如果 ShowForEdit 不为 true,我将跳过它。
@if (!ViewData.ModelMetadata.ShowForEdit)
{
return;
}
但是因为这些都在 html 中建立了索引,所以当我尝试通过回发将此集合保存回视图模型时,由于依赖索引号而失败。当我检查其值时,集合中缺少索引之后的每个项目都从我的视图模型中丢失。
在这种情况下,它实际上是我要跳过的集合中的第一个项目,因为我不希望它在编辑视图上可见,但因此,当我回发 html 中的第一个索引时,它是 1 (而不是 0就像通常那样),但是当您尝试保存更改时,这是一个问题。使用 javascript 更改 DOM 时这也是一个问题。
当 html 表示的集合中的一个或多个索引不存在时,是否有其他人遇到过默认模型绑定器读取回发数据的能力的问题?
有没有模型绑定器可以处理这个问题?
最近遇到了这个问题,并通过将 List 转换为以 GUID 作为键的 Dictionary 来解决它。
@foreach (var index in Model.EmailAddresses.Keys)
{
<label asp-for="@Model.EmailAddresses[index].Email">Email</label>
<input asp-for="@Model.EmailAddresses[index].Email" type="text" />
}
这避免了必须包含映射到索引值的隐藏输入。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)