EditorFor with Collections和Name属性

时间:2011-02-28 21:56:39

标签: model-view-controller templates

我正在尝试创建一个允许编辑多行数据的表单。我没有问题循环并获取输入框来呈现...我只是无法获得正确输出的名称属性。

我知道为了提交集合,您需要回发一个索引名称,其中索引从0开始是连续的。

<input name="Books[0].Title" />
<input name="Books[1].Title" />
and so on...

现在,我可以通过给定以下循环代码

来获取EditorFor函数以输出我的正确名称
@For n = 0 To (Model.Books.Count - 1)
    @Html.EditorFor(Function(m) Model.Books.Item(n).Title)
Next

给我

<input name="Books[0].Title" />
<input name="Books[1].Title" />
and so on...

我的问题是VS显示以下警告

在lambda表达式中使用迭代变量可能会产生意外结果。而是在循环中创建一个局部变量,并为其分配迭代变量的值。

然而,当我将循环更改为

@For n = 0 To (Model.Books.Count - 1)
    Dim item = Mode.Books.Item(n)

    @Html.EditorFor(Function(m) item.Title)
Next

我得到了

<input name="$VB$Local_item.Title" />
<input name="$VB$Local_item.Title" />
and so on...

有什么想法?我应该忽略这个警告吗?

感谢。

  • 杰森

1 个答案:

答案 0 :(得分:0)

MVC通过实际分解lambda表达式并查看它的构成来实现。它不只是执行lambda并获得结果。所以你需要在lambda中实际使用model参数才能工作。这应该适合你:

@For n = 0 To (Model.Books.Count - 1)
    Dim index = n

    @Html.EditorFor(Function(m) m(index).Title)
Next