2011-02-28 69 views
0

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

我知道,为了提交一个集合,你需要回发一个索引名称,其中该指数连续从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... 

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

谢谢。

  • 杰森

回答

0

MVC的工作原理是实际分崩离析的lambda表达式,看到什么它做的。它不只是执行lambda并获得结果。所以你需要在lambda中实际使用模型参数才能工作。这应该为你做:

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

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

它实际上是Razor引擎,而不是MVC,这样做.. – jmoreno 2017-11-16 01:35:06