我有一个EditorFor模板,我用一组项目调用(可能有一些)并且我单独引用索引(不是循环)所以我可以用某种方式将它们放置
@ Html.EditorFor(x => Model.SomeViewModels [0],“SomeTemplate”)
一切正常,但理想情况下我想通过更好的索引器引用数组
@ Html.EditorFor(x => Model.SomeViewModels [“要查找的项目”],“SomeTemplate”)
为了更好的可读性,以及在索引发生变化时应对的一些灵活性 所以我想知道我是否可以在模型上设置自定义索引器 - 就像这样
public ObjecToReturn this[string TextToFind]
{
get
{
return ObjectToReturn based on TextToFind
}
}
并且它确实有效 - 并正确地提取值但是当我查看Html时,输入字段都有name=[Item to Find].AnswerValue
之类的名称,我可以看到为什么但是它会混淆帖子
只是想知道是否有任何聪明的人知道如何将Model.SomeViewModels["Item to Find"]
发送给编辑器。但模板中的基础Html反映了Model.SomeViewModels[0]
(0是“待查找的项目”的索引)数组)所以回发工作
或者这可能是错误的做法 - 我希望我能错过一些简单明了的事情。
提前致谢
答案 0 :(得分:1)
默认情况下,DefaultModelBinder
绑定索引器从零开始并且是连续的集合。您可以通过为Index
属性添加隐藏输入来完成此工作(注意Index
不是模型的属性 - 它只是用于绑定集合的特殊值)。例如
<input type="text" name="SomeViewModels[ABC]" value = "" />
<input type="hidden" name="SomeViewModels.Index" value="ABC" />
<input type="text" name="SomeViewModels[XYZ]" value = "" />
<input type="hidden" name="SomeViewModels.Index" value="XYZ" />
添加value
属性与索引器值匹配的隐藏输入允许DefaultModelBinder
正确绑定集合