我有一个ViewModel,它将两个不同对象列表包括在内:List<Review> Reviews
和DayCommentary DayCommentary
到ReviewViewModel
。在我看来,我将Reviews
分组为Review.Country
:
var groupedReviews = Model.Reviews.GroupBy(item => item.Country)
在视图中,我遍历groupedReviews
并为每个group
构建一个HTML表格。我的目标是输出Review
中的每个group
,同时仍然绑定到模型以回发到控制器。这很重要,因为在视图中我有一个textarea字段,需要在POST操作期间将输入的文本传递回控制器。我知道这需要一个for循环而不是foreach来维护绑定。
我尝试了以下内容,它在视图中正确显示,但在FormMethod.Post
期间未绑定到模型,例如在添加/编辑/删除控制器操作期间:
@using (Html.BeginForm("Save", "Review", FormMethod.Post))
{
foreach (var group in groupedReviews)
{
<h6>@Html.Raw(group.Key)</h6>
<table>
<tr>
<th style="text-align: center">
@Html.DisplayNameFor(model => model.Reviews[0].Ticker)
</th>
</tr>
@for (var i = 0; i < group.Count(); i++)
{
<tr>
<td style="text-align: center">
@Html.TextAreaFor(model => group.ElementAt(i).Commentary)
@Html.HiddenFor(model => group.ElementAt(i).Commentary)
</td>
</tr>
}
</table>
}
}
我非常确定这里的问题是ElementAt(i)
,但是在迭代这种类型的分组集合时我可以使用什么呢?
我已经尝试将name
和id
属性分配给TextArea字段,如某些类似问题的答案中所建议的那样无效。
我一直在试图使用不同类型的循环并迭代不同的集合,但没有达到我想要的目标。