Nic*_*cht 5 asp.net-mvc defaultmodelbinder model-binding modelbinders asp.net-mvc-3
我在我的模型上有一组对象,我使用EditFor函数在View中渲染,我有一个EditorTemplate,负责实际渲染每个对象.
@Html.EditorFor(model => model.MyObjects)
Run Code Online (Sandbox Code Playgroud)
这已经运行了一段时间了,当你检查html时,我的文本框以model属性为前缀,后面跟着它们来自的集合的索引.
<input class="text-box single-line" id="MyObjects_2__SomeProperty"
name="MyObjects[2].SomeProperty" type="Text" value="" />
Run Code Online (Sandbox Code Playgroud)
但是我最近开始在集合的模型元数据中使用ShowForEdit和ShowForDisplay属性,如果ShowForEdit不是真的,在我的编辑器模板的第一行,我只是跳过它.
@if (!ViewData.ModelMetadata.ShowForEdit)
{
return;
}
Run Code Online (Sandbox Code Playgroud)
但由于这些都是在html中编入索引,当我尝试通过回发将此集合保存回viewmodel时,由于依赖于索引编号而失败.当我检查它的值时,我的视图模型中缺少缺少索引后的集合中的每个项目.
在这种情况下,它实际上是我正在跳过的集合中的第一个项目,因为我不希望它在编辑视图中可见,但是因为当我回发html中的第一个索引是1(而不是0)像往常一样),但是当你尝试保存更改时这是一个问题.使用javascript更改DOM时,这也是一个问题.
当html表示集合中的一个或多个索引不存在时,有没有其他人遇到默认模型绑定器读取回发数据的能力?
是否有模型粘合剂来处理这个问题?
有一些非常好的博客文章,允许您模型绑定到列表,而无需提供从零开始的连续索引。请看看
http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/
http://zahidadeel.blogspot.com/2011 /05/master-detail-form-in-aspnet-mvc-3-ii.html
此外,如果您对 MVVM 模式和淘汰赛 js 感兴趣,您可以查看steve sanderson
的这篇伟大作品
。更多阅读请参阅“编辑可变长度列表” mvc style”在谷歌中,它会给 ua 十几个有用的链接
| 归档时间: |
|
| 查看次数: |
3459 次 |
| 最近记录: |