0

我有一个 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"]到 EditorFor 但模板中的底层 Html 反映Model.SomeViewModels[0](0 是数组中“要查找的项目”的索引)所以回发工作

或者也许这是错误的方法 - 我希望我错过了一些简单的东西。

提前致谢

4

1 回答 1

2

默认情况下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正确绑定集合

于 2015-02-26T23:28:38.980 回答