Попробуйте вот так:
@{int index = 0;}
@foreach (var line in Model.Lines)
{
<tr>
...
</tr>
index++;
}
Теперь это просто для того, чтобы сделать Razor счастливым.Это не решение, которое я рекомендую.Реальное решение, которое я бы порекомендовал вам - это использовать шаблоны редактора:
<table width="80%" align="center">
<thead>
<tr>
<th align="center">Quantity</th>
<th align="left">Item</th>
<th align="right">Price</th>
<th align="right">Subtotal</th>
</tr>
</thead>
<tbody>
@Html.EditorFor(x => x.Lines)
</tbody>
<tfoot>
</tfoot>
</table>
и внутри соответствующего шаблона редактора строки (~/Views/Shared/EditorTemplates/LineViewModel.cshtml
), который будет отображаться для каждого элемента коллекции Line:
@model LineViewModel
<td align="center">
@Html.TextBoxFor(x => x.Quantity)
</td>
<td align="left">
@Html.DisplayFor(x => x.Product.Name)
</td>
<td align="right">
@Html.DisplayFor(x => x.Product.Price)
</td>
<td align="right">
@Html.DisplayFor(x => x.CalculatedTotalPrice)
</td>
<td align="right">
@Html.ActionLink("Remove", "RemoveItem", new { productId = Model.Product.ProductID }, null)
</td>
Видите, больше нет уродливых циклов, слабо типизированных помощников, работы с некоторыми индексами и т. Д. Все работает по соглашениям.