【发布时间】:2011-11-01 11:26:13
【问题描述】:
我正在关注 Steven Sanderson 的博文 here,以创建可编辑和可变长度的项目列表。在他的帖子中,他使用 div 在列表中显示新项目,但我使用的是表格。因此,我对每个项目的部分视图是呈现一个 tr 标签,其中包含要编辑的各个字段。现在我的局部视图看起来像这样:
<tr>
@using (Html.BeginCollectionItem("LineItems"))
{
<td>
@Html.TextBoxFor(m => m.Description)
@Html.ValidationMessageFor(m => m.Description)
</td>
<td>
@Html.TextBoxFor(m => m.Quantity)
@Html.ValidationMessageFor(m => m.Quantity)
</td>
<td>
@Html.TextBoxFor(m => m.Amount)
@Html.ValidationMessageFor(m => m.Amount)
</td>
}
</tr>
这实际上在我测试过的所有浏览器上都能正确呈现,但问题是这确实会生成无效的 HTML,因为它会在打开的 tr 标记之后放置一个隐藏的输入标记。
<tr>
<input type="hidden" name="LineItems.index" .... />
<td>
...
</td>
...
</tr>
另一个用户在链接的帖子上发表评论说您可以将 using 语句移动到第一个标记中并且它可以工作,但我无法使用 ASP.NET MVC 3 和 Razor 让它工作查看引擎。
有谁知道如何使用 Steven Sanderson 提出的逻辑,但在第一个 td 中获取隐藏的索引输入字段,以免生成无效的 HTML?
谢谢
【问题讨论】:
-
您是否必须修改 Steven Sanderson 博客中的 HtmlPrefixScopeExtensions 才能使其正常工作?如果是这样,您介意分享您所做的更改吗?我正在尝试在 MVC3 中使用 razor 做同样的事情,并且对象集合返回 null。谢谢
-
不,我们不必对此进行任何更改。唯一的变化是接受的答案中下面提到的语法。如果您愿意,您可以提出一个新问题,我可以将您的代码与我们的代码进行比较,看看是否有任何差异。
标签: html asp.net-mvc razor